RMAN本身不执行跨版本升级,仅负责还原和恢复;从11g到19c的升级实际发生在用19c软件启动并运行catupgrd.sql脚本阶段,需严格按startup upgrade→preupgrade检查→升级执行→compatible参数手动设置流程操作。
RMAN 本身不直接执行跨版本升级,它只负责还原(restore)和恢复(recover)数据文件。从 11g 到 19c 的“升级”,实际发生在还原完成后、用 19c 的 ORACLE_HOME 启动实例并运行升级脚本的阶段。所以关键不是“RMAN 升级”,而是“RMAN 还原 + 手动升级流程能否走通”。
还原后数据库仍为 11g 状态,必须用 19c 软件启动并显式升级
用 19c 的 rman 连接 11g 源库备份,还原到目标服务器后,数据文件仍是 11g 物理格式,控制文件也还是 11g 的。此时不能直接 startup,否则会报错 ora-00704: bootstrap process failure 或 ora-00702: version of file 。
必须:
• 确保当前 oracle_home 指向 19c 安装路径
• 用 19c 的 sqlplus / as sysdba 连接
• 执行 startup upgrade(不是 startup mount 或 startup)
• 再运行 @?/rdbms/admin/catupgrd.sql(dbua 底层也是调这个)
RMAN restore 前必须确认归档日志链完整且可访问
跨版本还原最常卡在 recovery 阶段,不是因为 RMAN 命令写错,而是归档缺失或路径不可读。
常见错误:ORA-19505: failed to identify file、ORA-01152: file %s was not restored from a backup
需确保:
• 备份时源库处于 ARCHIVELOG 模式,且未被 DELETE INPUT 清掉关键归档
• 目标端 LOG_ARCHIVE_DEST_1 参数指向的路径存在、有写权限,并与还原时指定的 SET ARCHIVELOG DESTINATION TO 一致
• 若使用 RESTORE DATABASE PREVIEW 发现某些归档编号缺失,得回源库补传对应 archivelog sequence # 文件
还原后不能跳过 preupgrade 检查,尤其 INVALID OBJECTS 和参数冲突
即使 RMAN 成功还原+recover,直接 startup upgrade 也可能中途失败,原因藏在字典状态里。
典型表现:catupgrd.sql 运行到 30% 左右卡住,日志中反复出现 recompiling invalid objects
必须在 startup upgrade 前做:
• 用 19c 的 preupgrade.jar 对还原后的库(此时仍以 11g 兼容模式挂载)运行检查:/u01/app/oracle/product/19.3.0/dbhome_1/jdk/bin/java -jar /u01/app/oracle/product/19.3.0/dbhome_1/rdbms/admin/preupgrade.jar TERMINAL TEXT
• 重点处理 ERROR 行:如 UTL_FILE_DIR 未清理、recyclebin 占用过大、sys 下有 >50 个 INVALID 对象
• 手动执行生成的 preupgrade_fixups.sql,但注意其中 DROP 类语句需人工确认
COMPATIBLE 参数不会自动更新,漏改会导致 19c 新特性不可用
还原+升级脚本跑完后,V$PARAMETER 中 compatible 仍显示 11.2.0.0.0 是正常现象——这是设计使然,不是失败。
但若忽略这步:
• ALTER SYSTEM SET COMPATIBLE='19.0.0' SCOPE=SPFILE 必须在升级成功、数据库 OPEN 后立即执行
• 然后 shutdown immediate + startup(不是 startup upgrade)
• 不重启就查 V$VERSION,会看到版本是 19c,但 V$OPTION 里很多特性(如 Oracle Database Vault)仍为 FALSE
• 更隐蔽的问题:后续用 expdp 导出时可能报 ORA-39126: Worker unexpected fatal error in KUPW$WORKER.CONFIGURE_JOB,根源就是 compatible 没生效
真正容易被忽略的,是还原后那个“半成品”状态:它既不是 11g 可运行库,也不是 19c 就绪库;所有检查、修复、参数调整,都得在 startup upgrade 之前、用 19c 工具对 11g 数据执行——这个时间窗口没有明确提示,全靠经验卡点。











