不能。rman物理备份仅做字节级还原,还原后仍是11g格式数据文件,必须执行升级流程(如catupgrd.sql)才能转为19c数据库;直接startup会因数据字典、控制文件、system表空间版本不兼容而报ora-00704/00702/01222错误。
不能。rman物理备份本身不支持“逻辑迁移”——它只做字节级还原,还原出来的仍是11g格式的数据文件,必须走升级流程才能变成19c数据库。所谓“rman实现逻辑迁移”,是误用术语,实际是用rman提供物理底片,再靠升级脚本完成逻辑层跃迁。
RMAN restore后为什么不能直接startup
还原后的数据文件、控制文件仍为11g格式,19c实例启动时会校验数据字典版本和块结构,不匹配就报错:
-
ORA-00704:bootstrap process failure(核心字典对象无法加载) -
ORA-00702:version of fileSYSTEMis not compatible(SYSTEM表空间头版本不识别) -
ORA-01222:control file version incompatible(控制文件版本高于当前实例能力)
关键点:RMAN不改数据文件内容,只搬字节;版本升级靠catupgrd.sql重写数据字典、调整内部结构。
必须在还原前完成的11g端预处理
跳过这步,即使RMAN restore成功,后续STARTUP UPGRADE也会卡在编译无效对象或参数冲突上:
- 运行
preupgrade.jar(用19c路径下的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 - 清空回收站:
purge dba_recyclebin - 编译所有无效对象:
@?/rdbms/admin/utlrp.sql - 禁用自动维护任务:
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE; - 确认归档模式开启且
LOG_ARCHIVE_DEST_1路径可写
还原后到真正升级成功的最小必要步骤
目标端19c实例必须处于NOMOUNT状态开始,且全程使用19c的ORACLE_HOME:
- 用19c的
rman连接目标实例:rman target / - 还原spfile和控制文件:
restore spfile from '<backup_location>'; restore controlfile from '<backup_location>';</backup_location></backup_location> - 挂载:
alter database mount; - 还原数据文件:
restore database; - 恢复(应用归档):
recover database;—— 此步依赖归档链完整,缺一个sequence就失败 - 关键切换:
shutdown immediate; startup upgrade;(不是startup mount) - 执行升级:
@?/rdbms/admin/catupgrd.sql(或调用dbua)
最后一步才是真正的“逻辑迁移”发生点:数据字典被重写、系统视图重建、新特性元数据注入。
容易被忽略的兼容性硬约束
很多失败源于没核对这些细节:
- 源库必须是
11.2.0.4+,低于此版本需先打PSU,否则catupgrd.sql会因内部函数缺失而中断 - 目标端
compatible参数不能早于源库版本,但也不能设成19.0.0就完事——必须等catupgrd.sql跑完才允许修改 - 若源库启用了
SEC_CASE_SENSITIVE_LOGON=FALSE,19c默认为TRUE,升级后需手动重置,否则部分用户登录失败 - RMAN备份时不能用
backup as copy,19c的restore命令不识别copy格式的备份集
真正耗时的从来不是RMAN还原,而是catupgrd.sql里对每个数据字典表的逐行重写和验证——这个过程不可跳过,也不可并行加速。











