RMAN不支持跨版本滚动升级,仅能通过逻辑备库+autoupgrade实现;物理备库因版本强一致限制无法滚动,其RMAN备份仅兼容原版本。
rman 本身不支持跨主要版本的滚动升级——它只负责还原数据文件,真正的“滚动”必须靠逻辑备库(logical dg)+ autoupgrade 实现;物理备库 + rman 只能做异机迁移式升级,无法滚动。
为什么不能用物理备库 + RMAN 做滚动升级
物理备库和主库必须运行相同数据库版本,这是 Oracle 的硬性限制。当你把 11g 主库的物理备库用 RMAN 备份恢复到新环境后,它仍是 11g 数据库,无法直接以 19c 身份持续同步主库变更。
- 强行用 19c 实例启动该物理备库会报
ORA-00704或ORA-00702:控制文件/数据字典版本不兼容 - 即使绕过启动,后续归档应用(
RECOVER MANAGED STANDBY DATABASE)会失败,因为 19c 的 recovery 进程无法解析 11g 的 redo 格式 - RMAN 的
BACKUP DATABASE PLUS ARCHIVELOG在物理备库上只能产出 11g 兼容备份,无法“升级”内容语义
真正能滚动的路径:逻辑 DG + RMAN 辅助备份
滚动升级的核心是让主库(11g)和备库(19c)长期共存并保持数据同步——这只有逻辑备库能做到。RMAN 在这里只起辅助作用:为逻辑备库构建初始快照或灾备底片。
- 先在 11g 主库启用补充日志:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;(否则逻辑同步无法捕获完整变更) - 用 RMAN 在主库执行
BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT,生成一致的全量底片 - 将备份集拷到目标机,在 19c 环境中还原并打开为
READ WRITE(不是MOUNT),作为逻辑备库的初始化源 - 在该库上配置逻辑复制(
DBMS_LOGSTDBY.START_LOGSTDBY),开始接收并转换主库的 redo 为 DML - 后续升级用
autoupgrade工具对这个已同步的 19c 逻辑备库执行就地升级(无需停主库)
RMAN 在滚动升级中的三个关键实操点
RMAN 不驱动滚动,但若用错,会让整个流程卡在第一步。以下三点必须手动确认:
-
CONTROLFILE AUTOBACKUP FORMAT必须显式设置路径:19c 默认写入 FRA,但新环境 FRA 可能未创建或权限不足,导致控制文件备份静默失败,影响后续任意恢复 - 还原后立即执行
RESTORE ARCHIVELOG ALL前,先用RESTORE ARCHIVELOG FROM TIME 'SYSDATE-2' PREVIEW检查归档链是否完整;缺失的 archivelog sequence 必须从主库补传,否则逻辑同步无法追平 - 逻辑备库首次 OPEN 后,立刻禁用自动备份:
CONFIGURE CONTROLFILE AUTOBACKUP OFF;否则 19c 会在每次SWITCH LOGFILE时尝试备份控制文件,而此时库仍处于逻辑应用状态,可能引发锁争用
最容易被忽略的兼容性断点
很多人做完 RMAN 还原 + 逻辑同步,以为万事大吉,结果在 autoupgrade -mode deploy 阶段失败——问题往往出在 compatible 参数没提前设对,或 V$DATABASE.OPEN_MODE 仍是 MOUNTED。
- 逻辑备库必须以
OPEN READ WRITE模式运行autoupgrade,不能是MOUNTED或READ ONLY;否则工具无法访问数据字典表 -
compatible参数必须在升级前手动设为'19.0.0'(用ALTER SYSTEM SET compatible='19.0.0' SCOPE=SPFILE),否则catuppst.sql会拒绝执行 - 检查
V$LOGSTDBY.PROCESS是否全部为APPLYING状态,若有WAITING FOR LOG,说明归档传输中断,RMAN 备份再全也没用


















