Oracle 11g升级至19c期间,标准物理Data Guard无法跨版本同步,必须转为逻辑Data Guard:先执行DBMS_LOGSTDBY.BUILD、开启主键补充日志、检查不兼容对象;停SQL Apply后用autoupgrade升级备库;切换前校验SCN一致并禁用自动维护任务。
oracle 11g 升级到 19c 期间,标准物理 data guard(adg)无法保持跨版本同步——主备库必须同版本,这是硬性限制。想“升级期间仍同步”,唯一可行路径是:先转为逻辑 data guard(逻辑dg),再升级备库。否则,任何试图在物理dg上直接升级主或备的操作,都会导致同步中断、ora-16700 或 ora-16778 等错误。
为什么物理DG不支持11g主库 + 19c备库同步
物理DG基于块级重放(Redo Apply),要求主备库的Oracle二进制兼容性严格一致。11.2.0.4 和 19c 的redo格式、数据块结构、SCN处理机制完全不同,连归档日志都无法被对方识别。官方文档明确禁止该组合——这不是配置问题,是架构层面不可行。
逻辑DG转换前必须做的三件事
逻辑DG用SQL Apply替代块重放,能跨版本运行,但代价是兼容性更苛刻。不做以下检查,转换后必然同步失败:
- 在主库执行:
EXEC DBMS_LOGSTDBY.BUILD—— 初始化LogMiner字典,否则备库无法解析11g redo为SQL - 确认主库已开启全字段补充日志:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;仅ADD SUPPLEMENTAL LOG DATA不够,缺主键列日志会导致DML丢失 - 扫描不兼容对象:
SELECT * FROM DBA_LOGSTDBY_UNSUPPORTED和SELECT * FROM DBA_LOGSTDBY_NOT_UNIQUE WHERE BAD_COLUMN = 'Y';遇到LONG、ROWID列或无主键表,必须提前改表结构或加RELY DISABLE约束
autoupgrade 在逻辑DG备库上的安全执行时机
逻辑DG备库升级不能边同步边升级——SQL Apply进程会与autoupgrade争抢数据字典锁,大概率触发ORA-00054: resource busy或升级中途挂起。正确顺序是:
- 在备库停掉SQL Apply:
ALTER DATABASE STOP LOGICAL STANDBY APPLY - 确认
V$LOGSTDBY.STATE为APPLYING BATCH或IDLE后再执行autoupgrade -mode UPGRADE -oracleHome /u01/app/oracle/product/19c - 升级完成后,**必须重建逻辑DG**:用新19c软件重新配置
LOG_ARCHIVE_DEST_2指向11g主库,并运行DBMS_LOGSTDBY.INSTANTIATE_TABLE补全差异对象,不能直接resume
切换前最后的数据一致性校验要点
从11g主库切到19c逻辑备库,不是简单ALTER DATABASE COMMIT TO SWITCHOVER。关键动作是:
- 主库执行
ALTER SYSTEM ARCHIVE LOG CURRENT三次,确保所有未传输redo落盘 - 在备库查
SELECT APPLIED_SCN, NEWEST_SCN FROM V$LOGSTDBY_PROGRESS,确认APPLIED_SCN追平主库当前SCN(可用SELECT CURRENT_SCN FROM V$DATABASE比对) - 禁用主库写入后,立刻在备库执行
EXEC DBMS_LOGSTDBY.SKIP_TRANSACTION跳过可能残留的未提交事务,避免切换后出现ORA-16225
最易被忽略的是:19c逻辑备库启用时默认开启AUTOMATIC_MAINTENANCE_JOB,若未关闭,会在切换瞬间触发统计信息收集,拖慢应用响应——务必在切换前执行EXEC DBMS_AUTO_TASK_ADMIN.DISABLE。


















