暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle 12c 安装 2019 年 7 月 RU 29708720 时 OPATCHAUTO-72050 报错处理

原创 问题归档 2019-08-29
5702

问题描述

问题描述

在 Red Hat Enterprise Linux 7.2 环境中,对 Oracle 12.2.0.1 RAC + GI 环境执行 2019 年 7 月 RU 29708720 的 opatchauto -analyze 预检查时,出现 OPATCHAUTO-72050Topology creation failed

核心报错如下:

OPATCHAUTO-72050: System instance creation failed.
OPATCHAUTO-72050: Failed while retrieving system information.
Topology creation failed.

Can't locate Cwd.pm: /root/perl5/lib/perl5/Cwd.pm: (null)
at /oracle/oracle/product/db12c/OPatch/auto/database/bin/RemoteHostExecutor.pl line 2.

BEGIN failed--compilation aborted at /oracle/oracle/product/db12c/OPatch/auto/database/bin/RemoteHostExecutor.pl line 2.
Not able to retrieve system instance details :: Unable to execute command : null

下面整理完整排查过程、原因分析和更稳妥的处理建议。

专家解答

Oracle 12c 安装 2019 年 7 月 RU 29708720 时 OPATCHAUTO-72050 报错处理

问题背景

在 Red Hat Enterprise Linux 7.2 环境中,对 Oracle 12.2.0.1 RAC + GI 环境执行 2019 年 7 月 RU 补丁分析检查时,opatchauto -analyze 在初始化阶段失败。

本次操作使用 GI Home 下的 opatchauto,补丁目录为 29708720

/oracle/12.2/product/grid12c/OPatch/opatchauto apply /oracle/patches/29699173/29708720/ -analyze

执行后很快返回错误:

OPATCHAUTO-72050: System instance creation failed.
OPATCHAUTO-72050: Failed while retrieving system information.
OPATCHAUTO-72050: Please check log file for more details.

Topology creation failed.

从结果看,补丁并没有进入真正的冲突检测或补丁应用阶段,而是失败在 opatchauto 收集系统拓扑信息的过程中。

环境信息

根据日志可确认:

• 操作系统:Red Hat Enterprise Linux 7.2

• Oracle Grid Infrastructure:12.2.0.1

• Oracle Database Home:12.2.0.1

• 架构:RAC,两节点

• 数据库角色:PRIMARY

• 补丁动作:RU 安装前的 -analyze 预检查

• 失败阶段:TopologyCreator 创建系统拓扑

日志中已经识别到 GI Home 和 DB Home:

Found local home at /oracle/12.2/product/grid12c
Found local home at /oracle/oracle/product/db12c

这说明 Oracle Home 本身能被识别,问题不在补丁目录或 Oracle Home 路径解析。

关键报错

继续查看 systemconfig*.log,真正的错误在后半段:

Can't locate Cwd.pm: /root/perl5/lib/perl5/Cwd.pm: (null)
at /oracle/oracle/product/db12c/OPatch/auto/database/bin/RemoteHostExecutor.pl line 2.

BEGIN failed--compilation aborted at
/oracle/oracle/product/db12c/OPatch/auto/database/bin/RemoteHostExecutor.pl line 2.

Not able to retrieve system instance details :: Unable to execute command : null

这里的重点不是 OPATCHAUTO-72050 本身。OPATCHAUTO-72050 只是外层错误,真正原因是 RemoteHostExecutor.pl 运行时加载 Perl 模块失败。

RemoteHostExecutor.pl 需要使用 Perl 标准模块 Cwd.pm。但是当前运行环境下,Perl 优先去 /root/perl5/lib/perl5/ 查找模块,结果没有找到 Cwd.pm,导致脚本编译失败。

原因分析

opatchauto 在 RAC/GI 场景下会调用一批 Perl 脚本收集本机和远端节点信息,例如:

• GI Home 信息

• DB Home 信息

• RAC 节点信息

• 数据库实例分布

• Oracle Home 是否共享

• 远端命令执行能力

本案例中,opatchauto 已经成功识别 CRS、DB Home、数据库实例和候选节点,直到调用 DB Home 下的:

/oracle/oracle/product/db12c/OPatch/auto/database/bin/RemoteHostExecutor.pl

才失败。

日志里的路径 /root/perl5/lib/perl5/Cwd.pm 很关键。它说明当前 root 用户环境里可能存在自定义 Perl 环境变量,或者 Perl 模块搜索路径被污染,导致 Oracle 自带 Perl 模块路径没有被正确使用。

常见相关变量包括:

PERL5LIB
PERL_LOCAL_LIB_ROOT
PERL_MB_OPT
PERL_MM_OPT

如果这些变量指向了不完整的 root 本地 Perl 目录,opatchauto 调用 Perl 脚本时就可能优先使用错误路径,从而找不到 Oracle 自带的模块。

处理过程

先确认系统中实际存在 Cwd.pm

find / -name "Cwd.pm" 2>/dev/null

当时查询结果中可以看到 Oracle Home 和 GI Home 下都存在对应模块:

/usr/lib64/perl5/vendor_perl/Cwd.pm
/oracle/oracle/product/db12c/perl/lib/5.22.0/x86_64-linux-thread-multi/Cwd.pm
/oracle/12.2/product/grid12c/perl/lib/5.22.0/x86_64-linux-thread-multi/Cwd.pm

由于本次是从 GI Home 发起 opatchauto,可以临时指定 GI Home 自带 Perl 模块路径:

export PERL5LIB=/oracle/12.2/product/grid12c/perl/lib/5.22.0/x86_64-linux-thread-multi

然后重新执行分析命令:

/oracle/12.2/product/grid12c/OPatch/opatchauto apply /oracle/patches/29699173/29708720/ -analyze

问题解决。

更稳妥的处理建议

如果生产环境遇到类似问题,不建议只机械地设置 PERL5LIB。建议按下面顺序排查。

1. 先检查 root 用户 Perl 环境变量

env | grep -i perl

如果看到 root 用户配置了 PERL5LIB=/root/perl5/lib/perl5 之类路径,建议在执行 opatchauto 前先清理:

unset PERL5LIB
unset PERL_LOCAL_LIB_ROOT
unset PERL_MB_OPT
unset PERL_MM_OPT

然后再次执行 opatchauto -analyze

如果清理后仍然报 Cwd.pm 缺失,再考虑显式指定 Oracle/GI 自带 Perl 路径。

2. 确认 GI Home 和 DB Home 自带 Perl 是否完整

ls -l /oracle/12.2/product/grid12c/perl/bin/perl
ls -l /oracle/12.2/product/grid12c/perl/lib/5.22.0/x86_64-linux-thread-multi/Cwd.pm

ls -l /oracle/oracle/product/db12c/perl/bin/perl
ls -l /oracle/oracle/product/db12c/perl/lib/5.22.0/x86_64-linux-thread-multi/Cwd.pm

如果 Oracle Home 内的 Perl 文件缺失,可能是 Home 不完整或文件被误删,这时不要只靠系统 yum install perl 掩盖问题,需要进一步核对 Oracle Home 完整性。

3. 确认 OPatch 版本

RU 安装前应检查 GI Home 和 DB Home 的 OPatch 版本:

/oracle/12.2/product/grid12c/OPatch/opatch version
/oracle/oracle/product/db12c/OPatch/opatch version

如果 OPatch 版本过低,可能会出现补丁识别、拓扑发现、冲突检查异常。实际打 RU 前建议先按补丁 README 要求更新 OPatch。

4. 分别检查 inventory 和补丁冲突

/oracle/12.2/product/grid12c/OPatch/opatch lsinventory
/oracle/oracle/product/db12c/OPatch/opatch lsinventory

必要时使用:

/oracle/12.2/product/grid12c/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /oracle/patches/29699173/29708720

如果是 RAC 环境,最终仍应以 opatchauto -analyze 结果为准,因为它会同时考虑 GI、DB Home、节点拓扑和实例状态。

本案例结论

本次故障不是 RU 补丁本身冲突,也不是 CRS 或数据库实例异常,而是 root 执行 opatchauto 时 Perl 模块搜索路径异常,导致 RemoteHostExecutor.pl 无法加载 Cwd.pm

临时解决方式:

export PERL5LIB=/oracle/12.2/product/grid12c/perl/lib/5.22.0/x86_64-linux-thread-multi

更推荐的排查方式是先检查并清理 root 用户的 Perl 环境变量,再确认 Oracle Home/GI Home 自带 Perl 是否完整。

复盘

OPATCHAUTO-72050 这类错误容易误导排查方向。看到 System instance creation failedTopology creation failed 时,不要只停留在外层错误码,应该继续看 cfgtoollogs/opatchautodb/systemconfig*.log

本案例的有效排查路径是:

opatchauto 外层错误
→ systemconfig 日志
→ TopologyCreator 失败
→ RemoteHostExecutor.pl 编译失败
→ Cwd.pm 缺失
→ Perl 模块搜索路径异常
→ 修正 PERL5LIB / 清理 Perl 环境变量

对生产环境打 RU 来说,-analyze 阶段失败反而是好事。它提前暴露了环境问题,避免在真正停库、滚动补丁或 GI patch 阶段才发现基础环境不干净。

最后修改时间:2026-05-19 19:29:19
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论