ADG物理备库升级前必须将ASM磁盘组的COMPATIBLE.ASM和COMPATIBLE.RDBMS设为11.2.0.4,因11g软件无法挂载19c兼容性磁盘组;autoupgrade前须移除CRS注册,避免CRS-2674错误;升级后需手动重收集统计信息并重启监听器以生效SQLNET.ALLOWED_LOGON_VERSION_SERVER配置。

autoupgrade 工具配合逻辑 DG 或 ADG 是目前最可控的平滑路径,但必须避开几个硬性前提错误,否则会在 DBUA 启动阶段直接报错退出。
ADG 物理备库升级前必须确认 ASM 兼容性
备库节点上新建的 ASM 磁盘组(如 +DATA、+ARCH)的 COMPATIBLE.ASM 和 COMPATIBLE.RDBMS 必须设为 11.2.0.4,不能是 19.0.0.0。
原因很直接:11g RAC 数据库软件无法挂载兼容性为 19c 的磁盘组,而搭建 ADG 初始同步必须用 11g 软件启动实例。若提前设成 19c 兼容级别,asmcmd mount 会失败,crsctl start res 报 ORA-15032,后续所有步骤卡死。
- 创建磁盘组时显式指定:
CREATE DISKGROUP DATA NORMAL REDUNDANCY DISK '/dev/oracleasm/disks/DISK1' ATTRIBUTE 'compatible.asm'='11.2.0.4', 'compatible.rdbms'='11.2.0.4'; - 已有磁盘组不可在线修改兼容性,只能重建
- 验证命令:
SELECT name, compatibility, database_compatibility FROM v$asm_diskgroup;
autoupgrade 执行前必须禁用集群资源注册
在备库完成 ADG 同步后、执行 autoupgrade 前,必须确保数据库实例未被 CRS 管理——即不能运行 srvctl add database 或 srvctl enable database。
因为 19c GI 集群软件不识别 11g 数据库资源定义格式,一旦注册,autoupgrade 运行时会触发 CRS-2674 错误并中止;更糟的是,强行升级后 CRS 无法启动该数据库资源,导致切换失败。
- 检查是否已注册:
srvctl config database -d orcl(若返回配置即已注册) - 若已注册,先停库再移除:
srvctl stop database -d orcl && srvctl remove database -d orcl -f - 升级全程保持
ORACLE_HOME指向 11g 路径,直到autoupgrade完成并验证通过
升级后立即重收集统计信息,别信 AUTO_SAMPLE_SIZE
19c 优化器对统计信息敏感度远高于 11g,尤其在分区表、状态码字段(如 order_status)、LOB 列混合场景下,DBMS_STATS.GATHER_SCHEMA_STATS 默认参数极易生成失真直方图,导致大量 SQL 执行计划突变为全表扫描。
这不是“慢慢调优”的问题,而是上线后立刻出现性能抖动的高发点。
- 禁用自动采样:
estimate_percent => 10(中小库)或5(大库),避免 19c 对超大表默认激进采样 - 关键倾斜字段必须显式建直方图:
method_opt => 'FOR COLUMNS SIZE 254 order_status, payment_type' - 索引统计必须同步更新:
cascade => TRUE, degree => 8,否则优化器看到“表小但索引大”,主动弃用索引 - 执行后验证:
SELECT column_name, histogram, num_buckets FROM dba_tab_col_statistics WHERE table_name = 'ORDERS' AND owner = 'APP';
客户端连接报 ORA-28040 不是配错,是没重启监听
即使你已在 $ORACLE_HOME/network/admin/sqlnet.ora 中添加了 SQLNET.ALLOWED_LOGON_VERSION_SERVER=8,若未重启监听器,该配置完全不生效。
这是升级后最常被忽略的“已改但无效”环节——监听仍按默认策略拒绝旧协议连接,PL/SQL Developer、DBeaver、甚至部分 JDBC 应用都会卡在认证阶段。
- 确认监听配置已写入:
cat $ORACLE_HOME/network/admin/sqlnet.ora | grep ALLOWED_LOGON_VERSION - 重启监听(注意是所有节点):
lsnrctl stop && lsnrctl start - 验证监听加载项:
lsnrctl status | grep -A5 "Security",应显示Allowed logon version server: 8 - 若用 SCAN 监听,还需检查 SCAN VIP 对应的监听是否也重启


















