Oracle 12C跨服务器升级19C:RMAN增量备份保留19C变更可行性咨询
可行性及操作步骤
可行。核心原理是:RMAN增量备份仅针对12C生产库中已存在的对象生成变更数据,恢复时只会覆盖这些对象的DML变更;19C上新增的表、字段等对象不在12C的备份范围内,不会被增量恢复操作修改,其数据会完整保留。
操作步骤
1. 提前完成19C基础恢复与手动变更
- 从12C生产库获取全量RMAN备份(包含数据文件、控制文件、归档日志),记录该全量备份对应的基础SCN(记为
SCN_BASE)。 - 在19C服务器上恢复数据库至
SCN_BASE并执行升级:STARTUP NOMOUNT; RESTORE CONTROLFILE FROM '<全量备份路径>'; ALTER DATABASE MOUNT; RESTORE DATABASE UNTIL SCN <SCN_BASE>; RECOVER DATABASE UNTIL SCN <SCN_BASE>; ALTER DATABASE OPEN UPGRADE; - 运行Oracle 19C官方升级脚本(如
catctl.pl)完成版本升级,之后正常打开数据库。 - 执行预上线手动变更:新增表、字段,插入业务测试数据等,记录此时19C数据库的SCN(记为
SCN_A)。
2. 上线前获取12C增量备份
- 停止业务应用前,在12C生产库基于
SCN_BASE创建增量备份,同时归档所有未归档日志:BACKUP INCREMENTAL FROM SCN <SCN_BASE> DATABASE PLUS ARCHIVELOG DELETE INPUT; - 停止应用后,记录12C生产库的最终SCN(记为
SCN_FINAL),确保无后续DML操作。
3. 在19C服务器同步12C的DML变更
- 将12C生成的增量备份文件、对应归档日志复制到19C服务器的RMAN备份目录。
- 启动19C数据库到mount状态:
SHUTDOWN IMMEDIATE; STARTUP MOUNT; - 执行增量恢复,指定恢复至
SCN_FINAL:RUN { SET UNTIL SCN <SCN_FINAL>; RESTORE DATABASE; RECOVER DATABASE; } - 打开数据库并重置日志:
ALTER DATABASE OPEN RESETLOGS; - 验证结果:
- 检查12C生产库的DML操作是否同步到19C
- 确认19C新增的表、字段及插入的数据未被修改或删除
关键注意事项
- 对象名唯一性:确保19C新增的表、字段名称在12C生产库中不存在,避免恢复时出现对象冲突。
- 禁止交叉修改:从19C升级完成到增量恢复前,禁止在19C上对12C已存在的对象执行DML操作,否则这些操作会被12C的增量恢复覆盖。若必须修改,需单独导出这些变更,恢复后重新导入。
- 备份兜底:执行增量恢复前,务必备份19C当前的数据库状态,防止操作失误导致数据丢失。
内容的提问来源于stack exchange,提问作者Sangi Dan Paliwal
相关产品推荐
相关产品推荐

