问题描述
问题描述
在 Red Hat Enterprise Linux 7.2 环境中,对 Oracle 12.2.0.1 RAC + GI 环境执行 2019 年 7 月 RU 29708720 的 opatchauto -analyze 预检查时,出现 OPATCHAUTO-72050 和 Topology 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 failed 或 Topology creation failed 时,不要只停留在外层错误码,应该继续看 cfgtoollogs/opatchautodb/systemconfig*.log。
本案例的有效排查路径是:
opatchauto 外层错误
→ systemconfig 日志
→ TopologyCreator 失败
→ RemoteHostExecutor.pl 编译失败
→ Cwd.pm 缺失
→ Perl 模块搜索路径异常
→ 修正 PERL5LIB / 清理 Perl 环境变量
对生产环境打 RU 来说,-analyze 阶段失败反而是好事。它提前暴露了环境问题,避免在真正停库、滚动补丁或 GI patch 阶段才发现基础环境不干净。




