主库是否真在传日志?先看归档模式和传输配置:SELECT log_mode FROM v$database 必须返回 ARCHIVELOG;SHOW PARAMETER log_archive_dest_2 必须非空、非 DISABLE 且 SERVICE 可解析;LGWR 进程需在 v$managed_standby 中显示 CONNECTED;备库 RFS 应为 IDLE 或 WAIT_FOR_LOG,MRP0 必须为 APPLYING_LOG;VALIDATE DATABASE ARCHIVELOG ALL 可识别隐性 SCN 断层 Gap。

主库是否真在传日志?先看归档模式和传输配置
备库收不到日志,90% 的情况不是网络断了,而是主库压根没启动传输机制。别急着查防火墙,先确认基础链路是否激活。
-
SELECT log_mode FROM v$database必须返回ARCHIVELOG;若为NOARCHIVELOG,归档根本不会生成,更谈不上传输 -
SHOW PARAMETER log_archive_dest_2(或对应 DG 目标编号)必须非空、非DISABLE、且服务名(SERVICE=xxx)在tnsnames.ora中可解析;若值含MANDATORY但未配有效 standby,主库可能直接阻塞归档 -
ARCHIVE_LAG_TARGET设为0或未设置时,归档只在日志切换时触发——高负载下可能几小时才切一次,备库“看起来”像中断;建议设为60~180
LGWR 进程连上了吗?查 v$managed_standby 看实时状态
LGWR(而非 ARCH)才是实时传输的主力。它卡住,日志就堆在主库内存里,备库永远等不到第一字节。
- 在主库执行:
SELECT process, status, client_process, sequence#, block# FROM v$managed_standby - 关键看
process = 'LGWR'且status = 'CONNECTED';若为NOT ACTIVE、FAILED或RETRYING,说明链路未通或认证失败 - 同时检查主库告警日志(
$ORACLE_BASE/diag/rdbms/<sid>/<sid>/trace/alert_<sid>.log</sid></sid></sid>),搜索:ORA-16057(DG 配置缺失)、ORA-12541(TNS 连接拒绝)、ORA-16714(参数不一致)
备库 RFS 收到了吗?MRP 在应用吗?
日志传过来了≠备库在同步。常见假象是“传输成功但应用停滞”,表现为 v$archived_log 有新记录,v$managed_standby 却显示 MRP0 不动。
- 在备库查:
SELECT process, status, thread#, sequence# FROM v$managed_standby WHERE process IN ('RFS', 'MRP0') -
RFS状态应为IDLE或WAIT_FOR_LOG(表示正在等新日志);若长期IDLE且无新sequence#更新,说明主库根本没发过来 -
MRP0状态必须是APPLYING_LOG;若为WAIT_FOR_GAP,说明已收到部分日志但缺中间段;若为NOT APPLYING,需手动启动:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT - 确保备库处于
MOUNTED状态(非READ ONLY),否则MRP0无法启动
Gap 是真丢了还是假 Gap?用 VALIDATE DATABASE ARCHIVELOG ALL 定位 SCN 断点
v$archive_gap 只能告诉你序列号缺哪一段,但无法判断物理文件是否真丢失——比如归档被误删后控制文件仍跳号,视图里看不出断裂,只有 VALIDATE 能揪出这种隐性问题。
- 在主库或备库(
MOUNT状态下)执行:VALIDATE DATABASE ARCHIVELOG ALL - 重点看输出中的
Archive Log SCN Gap和Missing Archive Log;若提示gap from 1000 to 1099,说明该 SCN 区间无对应归档文件,无论v$archive_gap是否返回结果 - 注意:该命令需在 RMAN 连接目标库(非 catalog)下运行;若备库配置了
DELAY属性,需等延迟超时后再执行,否则会把未到时的日志误判为“缺失” -
ARCHIVE LOG LIST和v$archived_log只反映“已被注册”的日志,对从未写入控制文件的丢失归档完全沉默
真正难处理的 Gap 往往藏在 SCN 连续性里——序列号看着顺,SCN 却断层。这时候 v$archive_gap 是空的,VALIDATE DATABASE 才是最后一道照妖镜。


















