OUI不能用于安装RU补丁,因其不识别RU补丁包的元信息结构且不触发datapatch等关键后置步骤;RU补丁必须用opatch apply或opatch auto(依环境)执行,并严格遵循停库、版本校验、冲突检查及datapatch更新数据字典等流程。
oui 不能用于安装 ru 补丁包,必须用 opatch;误用 oui 会导致补丁未生效、数据字典不更新、后续启动失败。
为什么 OUI 不适用于 RU 补丁安装
OUI(Oracle Universal Installer)是面向软件安装、克隆、升级的图形化工具,它不识别 RU 补丁包的元信息结构,也不触发 datapatch 等关键后置步骤。RU 补丁包(如 p35021191_190000_Linux-x86-64.zip)本质是 OPatch 可解析的 patch archive,其 etc/config/inventory.xml 和 README.html 均按 OPatch 规范编写。OUI 尝试加载这类 ZIP 会报错 Invalid inventory location 或直接静默跳过。
常见误操作包括:
- 把 RU ZIP 解压后双击
runInstaller—— 这是 OUI 启动器,不是补丁入口 - 在 OUI 图形界面里点“Apply Patch”并选中 RU 解压目录 —— OUI 无法校验冲突,也不会停库
- 以为“OUI 支持打补丁”就混用场景 —— 它只支持 PSU/RU 之前的旧式单补丁(如个别 one-off),且已弃用多年
opatch apply 是 RU 安装的唯一正确入口
opatch apply 是 RU 补丁的法定执行命令,它完成三件事:校验环境兼容性、应用二进制文件、生成待执行的 SQL 清单。但必须满足前提:
- 数据库实例和监听必须已 shutdown(
sqlplus / as sysdba中执行shutdown immediate) -
$ORACLE_HOME/OPatch/opatch version必须 ≥ 补丁要求的最低版本(例如 19.27 RU 要求 ≥12.2.0.1.34) - 非 RAC 单机 ASM 环境,仍需停 CRS(
crsctl stop crs),不能只停 DB - 必须先运行
opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <patch_dir></patch_dir>,否则可能在 apply 中途因冲突中断
示例流程:
cd $ORACLE_HOME sqlplus / as sysdba <<EOF shutdown immediate exit EOF lsnrctl stop opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /tmp/p35021191_190000_Linux-x86-64 opatch apply /tmp/p35021191_190000_Linux-x86-64
datapatch 是 RU 安装不可跳过的最后一步
opatch apply 只改二进制和库存,不碰数据库内部对象。RU 补丁引入的数据字典变更(如新视图、修复的 PL/SQL 包)必须由 datapatch 执行。漏掉这步,现象包括:
- 查询
v$database显示BANNER_FULL仍是旧版本号 - 执行某些内置包(如
DBMS_STATS)报PLS-00302: component 'XXX' must be declared -
opatch lsinventory -detail显示补丁状态为Applied,但dba_registry_sqlpatch查不到记录
正确做法:
- 启库后立刻执行:
datapatch -verbose - 确认输出含
Successfully applied和对应 RU 的PATCH_ID(如35021191) - 检查
dba_registry_sqlpatch中STATUS = 'SUCCESS'且ACTION = 'APPLY'
opatch auto 不等于“全自动”,RAC 和 GI 环境必须严格区分
opatch auto 仅适用于 GI+DB 联合升级场景(如 RAC 或单机 ASM),它会自动协调 Grid Infrastructure 和 Database Home 的补丁顺序。但在纯单机非 ASM 数据库上运行 opatch auto,反而会因找不到 CRS 而卡死或报 PRCI-1077。
关键区别:
-
opatch auto /path/to/rupatch:要求 root 权限,自动停 CRS → 打 GI 补丁 → 打 DB 补丁 → 启 CRS → 启 DB -
opatch apply /path/to/rupatch:仅作用于当前$ORACLE_HOME,不碰 GI,需手动控制启停 - 混淆二者最常导致:GI 补丁没打、DB 补丁打了一半、OCR 损坏、集群无法拉起
判断依据看当前环境是否含 +ASM 实例或 crsctl stat res -t 有输出 —— 有即按 opatch auto 流程走,没有就老实用 opatch apply。


















