前言:DG备库不同步,先别急着重启
先说最常遇到的情况。很多运维人员发现备库延迟、归档不传输时,第一反应就是检查网络、重启监听、重构DG配置,兜了一大圈才发现,问题其实就是一行参数没设对。Oracle Data Guard同步异常排查,有个很简单的逻辑顺序:先看参数状态 → 再查配置完整性 → 确认密码文件 → 最后验证网络连通性。按照这个顺序来,大部分DG同步问题都能很快定位。
log_archive_dest_state_2 是 DEFER 状态
这个情况最容易被当成“正常”忽略掉。主库的归档日志生成看起来一点问题都没有,但备库就是收不到任何数据。为什么会这样?因为主库压根就没打算发送。
检查v$parameter中的log_archive_dest_state_2,如果显示DEFER,那一切都说得通了——无论什么原因导致该参数被设为DEFER(人工误操作、异常中断、脚本bug都可能),LGWR或ARCn进程都不会向备库推送任何日志。这是最常见也最低级的Data Guard配置问题。

排查方法很直接:SELECT NAME, VALUE FROM v$parameter WHERE name = 'log_archive_dest_state_2';。如果返回DEFER,立刻执行ALTER SYSTEM SET log_archive_dest_state_2 = ENABLE SCOPE=BOTH;。注意,RAC环境中这条命令对所有实例生效,不需要逐节点操作。但有一个隐患:假如操作系统重启后参数被重置(以前确实有类似的坑),一定要加个监控或启动脚本确保参数持久化。
LOG_ARCHIVE_DEST_2 配置缺失 SERVICE 或拼写错误
这一点听起来很基础,但出错的频率绝对不低。参数配置里如果不写SERVICE=xxx,Oracle就会把它当成本地归档路径,压根不触发网络传输。哪怕其他参数全都对,这个字母配错了,就等于白忙一场。
举个例子,有人可能把配置写成:LOG_ARCHIVE_DEST_2='LOCATION=/arch'。这是本地路径,不是DG传输。正确的最小可用配置应该是这样:
LOG_ARCHIVE_DEST_2='SERVICE=standby_db ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db'
配完之后,必须用这句验证:SELECT STATUS, ERROR FROM v$archive_dest_status WHERE DEST_ID = 2;。期望的结果是STATUS为VALID且ERROR列为空。如果看到了ORA-16057: DGID not set这种错误,那基本就是DB_UNIQUE_NAME没有对上LOG_ARCHIVE_CONFIG里的配置。
密码文件缺失或 SYS 权限未同步
这是个比较隐蔽的问题,往往让人卡很久。RAC主库的LGWR进程是用SYS身份去连接备库监听器的。如果备库的密码文件不存在,或者密码文件和主库不一致(特别是直接复制过去却没有重建的情况),那LGWR就会静默失败——不报明显的错误,也不传输日志。
现象非常有特点:在v$managed_standby里看到LNS状态长期IDLE,SEQUENCE#根本不涨,但v$archive_dest_status的ERROR列却是空的,或者只显示一个模糊的超时。这种情况下,最有效的做法就是重建密码文件:orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=。然后保证主库和备库两端密码完全一致,SYS用户在备库也必须拥有SYSDBA权限。
防火墙或监听器拦住了归档流
很多人有一个认知误区:归档传输走的是SQL*Net通道,默认端口1521。但问题是,这个1521是监听器端口,不是数据库实例端口,也不是普通的连接路径。很多运维人员只开了实例端口,但监听器本身要能收发大包这一点却漏掉了。
排查思路很简单:先用telnet standby_host 1521做底层连通性测试,必须能通。然后在备库检查监听器状态:lsnrctl status,确认服务名(比如standby_db)是READY状态,而不是UNKNOWN。如果这两步都没问题,但问题依然存在,特别是跨地域传输的时候(比如北京到云南这么远的距离),防火墙往往会限制单包大小,导致归档传输卡在中间。这种情况下,要么调大MTU,要么找网络团队配合放行大包。
真正难排查的,往往是监听器看起来“一切正常”,但归档流被防火墙无声丢弃。你可能在ALERT.LOG里只看到ARCn: Terminating ARCH hung on a network operation这种模糊提示。这时候别瞎猜,直接抓包或临时关闭防火墙验证,是最快的解决办法。
