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 <h3>datapatch 是 RU 安装不可跳过的最后一步</h3> <p><code>opatch apply</code> 只改二进制和库存,不碰数据库内部对象。RU 补丁引入的数据字典变更(如新视图、修复的 PL/SQL 包)必须由 <code>datapatch</code> 执行。漏掉这步,现象包括:</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill6971" title="QuantOracle"><img src="https://img.php.cn/upload/skill/000/000/081/179120536643782.jpg" alt="QuantOracle" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill6971" title="QuantOracle" class="overflowclass">QuantOracle</a> <p class="overflowclass">63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……</p> </div> <a rel="nofollow" href="/xiazai/skill6971" title="QuantOracle" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>
- 查询
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。










