Oracle 12c RAC不支持FPP一键打补丁,因FPP最低要求18c,12c缺少rhp子系统、元数据接口及兼容crsctl输出格式,rhpctl命令会报ORA-48108或验证失败。
不能直接在 oracle 12c rac 上“一键式”打补丁——fpp 不支持 12c 作为目标数据库版本进行全自动 patching 操作。 官方明确要求 fpp 管理的数据库最低版本为 18c(即 18.1),12c 属于已退出主流支持周期的旧版本,fpp 的 rhpctl 命令在发现、注册、move 或 patch 时会拒绝识别或操作 12c 的 oracle_home。
为什么 rhpctl add client 或 rhpctl discover client 在 12c RAC 上失败
FPP 的客户端发现机制依赖 Oracle Clusterware 18c+ 引入的统一元数据接口和 crsctl query crs activeversion 输出格式。12c 的 CRS 版本(如 12.1.0.2)返回结构不兼容,rhpctl discover client 会报错:ORA-48108: invalid value given for the diagnostic_dest initialization parameter 或直接卡在节点验证阶段。
- 12c RAC 的
ORACLE_HOME缺少 FPP 所需的rhp子系统二进制(如$ORACLE_HOME/rhp/bin/rhp_agent) -
rhpctl默认调用的 Python 脚本(如rhpctl.py)硬编码了对 18c+oraenv和srvctl行为的假设 - 即使强行注册,后续
rhpctl move database会因无法解析 12c 的spfile路径模板而中断
想用 FPP 管理 12c RAC?唯一可行路径是升级到 19c+
FPP 的设计前提是“out-of-place patching”,即基于黄金镜像(Gold Image)部署全新 ORACLE_HOME,再迁移数据库。这个流程天然要求目标数据库具备现代 patching 元数据能力 —— 12c 不满足。
- 必须先将 12c RAC 升级至 19c(推荐 19.20 或更高 PSU),才能被 FPP Server 或 Local Mode 正确识别
- 升级后,确保所有节点上
crsctl check cluster -all和srvctl status database -d返回一致且无警告 - 执行
rhpctl add client -client my12c_cluster_alias -clusternamealias my19c_cluster时,实际指向的是升级后的 19c 集群名,不是原始 12c 名称
如果必须在 12c 环境中模拟“类 FPP 流程”
没有真正意义上的“一键”,但可手动复刻 FPP 的核心逻辑:黄金镜像 + out-of-place + srvctl 切换。这需要严格遵循 MAA 最佳实践,且每步都需人工校验。
- 准备一个干净的 12.1.0.2 GI + DB 补丁集(例如 Oct 2023 RU),解压到共享存储(如
+GRID/ora12c_gold_home)并运行runInstaller -silent -ignorePrereqFailure - 用
srvctl add database -d mydb_new -o /u01/app/oracle/product/12.1.0.2_gold -r PRIMARY -s OPEN -t IMMEDIATE -n mydb注册新库,但不启动 - 停原库:
srvctl stop database -d mydb;再用srvctl config database -d mydb确认当前 HOME 路径 - 切换 HOME:
srvctl modify database -d mydb -o /u01/app/oracle/product/12.1.0.2_gold;然后srvctl start database -d mydb - 注意:12c 不支持
rhpctl move database的自动 rollback 机制,出错只能靠srvctl modify database -d mydb -o手动回切
真正省事的“一键”只存在于 19c/21c/23ai 的 FPP 环境里。对 12c 坚持用 FPP,等于拿新工具硬套旧骨架——表面跑通,内里全是临时胶带和绕过检查的 hack。最易被忽略的是:FPP 的 gold image 必须通过 rhpctl register image 导入,而该命令在 12c 场景下根本不会出现在有效命令列表中。











