19c备库无法直接接收12c主库redo,因内核级不兼容(block header、scn编码等),必须通过同版本临时备库中转升级;逻辑dg是唯一支持11g→19c零停机路径,但需严格校验日志组、数据类型并确认不可逆性。

不能在19c主库上直接“升级”到更高版本,也不能让19c备库直接接收12c/11g主库的redo——跨大版本Data Guard滚动升级必须分阶段构建兼容链路,否则ALTER DATABASE COMMIT TO SWITCHOVER会卡住或报ORA-16470、ORA-16139。
为什么19c备库无法直接接收12c主库的redo
19c的MRP进程不识别12c生成的redo日志格式,物理备库启动RECOVER MANAGED STANDBY DATABASE时会立即报错或静默失败。这不是配置问题,而是内核级不兼容:12c的log writer写入的block header、SCN编码方式、甚至sequence#跳变逻辑都与19c不一致。
必须先部署一个与源主库**完全同版本**(如12.2.0.1)的临时备库,让它先追平所有归档,再在这个临时库上滚动升级到19c:
- 目标RAC集群需单独安装12.2.0.1 GI + DB软件(路径不能复用源端
$ORACLE_HOME) - 用
DUPLICATE TARGET DATABASE FOR STANDBY或RMAN备份恢复方式构建空实例 - 配置
LOG_ARCHIVE_DEST_2指向该临时备库,并确认V$ARCHIVED_LOG.APPLIED = 'YES'持续稳定 - 只有当
SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE APPLIED='YES'与主库当前V$LOG.SEQUENCE#严格相等,才可进入下一步
备库滚动升级到19c的关键操作点
临时备库同步稳定后,才能在它上面执行升级;此时主库仍在运行,业务无感。但以下动作缺一不可:
- 停MRP:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL - 关闭实例,用19c的
dbupgrade或DBUA升级字典——必须先运行preupgrade.jar并执行生成的@/u01/preupgrade_fixups.sql - 升级后重启实例,**手动重建standby redo log**(19c要求SRL文件大小 ≥ 当前online redo log),否则MRP无法启动
- 启MRP:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT - 验证:
@?/rdbms/admin/catuppst.sql无报错、SELECT COMP_NAME, STATUS FROM DBA_REGISTRY全部VALID、只读打开确认数据可查
Switchover执行前必须满足的三个硬性条件
哪怕漏检一项,ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY就会hang住或报ORA-16139:
-
SELECT SWITCHOVER_STATUS FROM V$DATABASE必须返回TO PRIMARY(不是SESSIONS ACTIVE,也不是SWITCHOVER PENDING) - 每个线程下
SELECT THREAD#, MAX(SEQUENCE#), APPLIED FROM V$ARCHIVED_LOG GROUP BY THREAD#, APPLIED中APPLIED='YES'的最大sequence必须等于主库V$LOG.SEQUENCE# - 所有依赖捕获进程必须已STOP:
SELECT * FROM DBA_CAPTURE和SELECT * FROM DBA_LOG_GROUPS为空,GoldenGate、Streams、CDC均不可运行
逻辑DG是11g→19c唯一支持零停机的路径
物理DG跨大版本必须走“同版本临时备库→升级→switchover”三步,而逻辑DG允许主库11g、备库19c并存,靠SQL Apply而非块复制同步。但它有强约束:
- 必须先将物理备库转换为逻辑备库(
ALTER DATABASE START LOGICAL STANDBY APPLY),且转换前要确保DBA_LOG_GROUPS完整、UNDO_RETENTION足够 -
autoupgrade仅对逻辑备库生效,且必须先执行ALTER DATABASE STOP LOGICAL STANDBY APPLY - 执行前确认
V$LOGSTDBY.STATE返回IDLE,否则会锁冲突导致静默挂起 - 逻辑DG不支持所有数据类型(如
XMLType、SDO_GEOMETRY需额外处理),升级前必须跑DBMS_LOGSTDBY.BUILD校验
最易被忽略的是:逻辑DG切换后,原主库降为逻辑备库,不能再直接回切——它需要先转成物理备库再重建,整个过程不可逆。实际割接前务必在测试环境完整走通从11g主库→逻辑备库→19c升级→SQL Apply→业务验证全链路。











