一、基础状态检查
数据库角色与模式
SELECT db_unique_name, open_mode, database_role, switchover_status FROM v$database;
预期状态:
- 主库:
OPEN_MODE=READ WRITE
,DATABASE_ROLE=PRIMARY
- 备库:
OPEN_MODE=READ ONLY WITH APPLY
,DATABASE_ROLE=PHYSICAL STANDBY
- 主库:
ADG配置有效性
SHOW PARAMETER log_archive_dest_2; -- 检查归档目标状态 SHOW PARAMETER log_archive_config; -- 检查DG配置
二、日志同步健康检查
主备库归档一致性
-- 主备库均执行: SELECT THREAD#, MAX(SEQUENCE#) FROM v$archived_log WHERE resetlogs_change# = (SELECT resetlogs_change# FROM v$database_incarnation WHERE status='CURRENT') GROUP BY THREAD#;
要求:主备库的
MAX(SEQUENCE#)
差值应≤1(允许轻微延迟)。检查GAP缺口
-- 备库执行: SELECT * FROM v$archive_gap; -- 有返回结果说明存在GAP
处理方案:
- 若返回
THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE#
,需从主库拷贝缺失归档到备库并注册:ALTER DATABASE REGISTER PHYSICAL LOGFILE '/path/to/archive_log_seq90.arc';
- 若返回
传输与应用延迟监控
-- 备库执行: SELECT name, value, time_computed FROM v$dataguard_stats WHERE name IN ('transport lag', 'apply lag');
阈值建议:
transport lag
(传输延迟)与apply lag
(应用延迟)均需 ≤ 5分钟。
三、进程与错误监控
关键进程状态
SELECT process, status, sequence#, thread# FROM v$managed_standby;
关键进程说明:
进程 主库角色 备库角色 正常状态 LNS 存在 不存在 WRITING
MRP0 不存在 存在 APPLYING_LOG
异常状态处理:
- MRP0状态为
WAIT_FOR_GAP
:检查是否存在归档缺口(参考第二节)。 - MRP0状态为
WAIT_FOR_LOG
:主库日志传输异常。
- MRP0状态为
归档传输错误
-- 主库执行: SELECT dest_name, status, error FROM v$archive_dest_status WHERE dest_id = 2; -- 对应备库的归档目标
严重错误:
STATUS=ERROR
或ERROR
字段非空(如ORA-12170
网络超时)。
四、常见问题定位
未应用日志检查(备库)
SELECT thread#, COUNT(*) FROM v$archived_log WHERE applied='NO' GROUP BY thread#;
处理:若积压持续增长,检查MRP0进程是否停滞。
日志传输阻塞(主库)
-- 主库检查未发送日志量: WITH arch AS (SELECT thread#, MAX(sequence#) arch_seq FROM gv$managed_standby WHERE process='ARCH' GROUP BY thread#), lns AS (SELECT thread#, MAX(sequence#) lns_seq FROM gv$managed_standby WHERE process='LNS' GROUP BY thread#) SELECT a.thread#, l.lns_seq - a.arch_seq AS unsent_logs FROM arch a, lns l WHERE a.thread# = l.thread#;
阈值:
unsent_logs > 10
需排查网络或存储性能。归档删除策略
重要原则:- ❌ 禁止在备库强制删除未应用的归档(
DELETE FORCE
)! - 若备库空间不足:
-- 主库临时停止传输(缓解压力): ALTER SYSTEM SET log_archive_dest_state_2=DEFER; -- 空间释放后恢复: ALTER SYSTEM SET log_archive_dest_state_2=ENABLE;
- ❌ 禁止在备库强制删除未应用的归档(
五、巡检总结清单
类别 | 检查项 | 频率 | 异常处理 |
---|---|---|---|
基础状态 | 数据库角色与模式 | 每日 | 检查switchover_status |
日志同步 | 归档序列一致性 | 每小时 | 补注册缺失归档 |
日志同步 | 传输与应用延迟 | 每小时 | 监控v$dataguard_stats |
进程健康 | LNS/MRP0进程状态 | 每小时 | 重启进程或排查GAP |
错误监控 | 归档传输错误 | 每日 | 检查网络/存储日志 |
空间管理 | 归档未应用量 | 每日 | 避免强制删除,主库暂断传输 |
关键提示:
- 主备切换(Switchover/Failover)后必须重新验证所有巡检项。
- 发现
UNRESOLVABLE GAP
需立即人工干预。- 备库的
_system_trig_enabled
参数应为FALSE
(避免触发器重复执行)。
附:进程状态速查表
MRP0状态 | 含义 | 紧急度 |
---|---|---|
APPLYING_LOG |
正常应用日志 | 正常 |
WAIT_FOR_GAP |
等待缺失日志 | 警告 |
WAIT_FOR_LOG |
等待新日志传输 | 警告 |
NOT ALLOWED |
配置错误/角色异常 | 严重 |