Oracle Data Guard 监控详解
Oracle Data Guard 监控详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Data Guard 监控保证灾备可用[1]:
2. 关键指标
2.1 延迟
- Transport Lag:传输延迟
- Apply Lag:应用延迟
- 目标:秒级
2.2 GAP
- 归档缺失
- 备库落后
- 监控
2.3 状态
- 主备状态
- 保护模式
- 切换状态
3. 视图
3.1 v$database
SELECT database_role, protection_mode, protection_level,
switchover_status, open_mode
FROM v$database;
3.2 v$managed_standby
SELECT process, status, client_process, thread#, sequence#,
block#, blocks, delay_mins
FROM v$managed_standby;
3.3 v$archive_dest
SELECT dest_id, status, error, gap_status
FROM v$archive_dest
WHERE dest_id IN (1,2);
4. v$dataguard_stats
4.1 关键
SELECT name, value, unit, time_computed
FROM v$dataguard_stats;
4.2 指标
- transport lag
- apply lag
- apply finish time
- estimated startup time
4.3 解读
- 传输延迟:网络
- 应用延迟:备库
- 监控
5. v$standby_event_histogram
5.1 应用延迟分布
SELECT * FROM v$standby_event_histogram
ORDER BY name, time;
5.2 解读
- 大部分低延迟:好
- 高延迟多:优化
6. Broker 监控
6.1 配置
DGMGRL> SHOW CONFIGURATION;
6.2 数据库
DGMGRL> SHOW DATABASE prod;
DGMGRL> SHOW DATABASE stby;
6.3 状态报告
DGMGRL> SHOW DATABASE prod StatusReport;
DGMGRL> SHOW DATABASE stby StatusReport;
7. 日志
7.1 alert log
- 主库 alert log
- 备库 alert log
- 关键事件
7.2 drc 日志
- drc<sid>.log
- Broker 日志
- 诊断
7.3 进程
- LNS
- RFS
- MRP/LSP
- 日志
8. GAP 检测
8.1 查看
-- 备库
SELECT * FROM v$archive_gap;
8.2 修复
- FAL 自动
- 手动注册
- 监控
8.3 验证
-- 主库
SELECT max(sequence#) FROM v$archived_log WHERE dest_id=2;
-- 备库
SELECT max(sequence#) FROM v$archived_log;
-- 一致
9. 性能监控
9.1 传输
SELECT * FROM v$redo_dest_resp_histogram;
9.2 应用
SELECT * FROM v$standby_event_histogram;
9.3 进程
SELECT process, pid, status, client_process
FROM v$managed_standby;
10. 告警
10.1 OEM
- Data Guard 页面
- 状态
- 告警
10.2 脚本
#!/bin/bash
sqlplus -s / as sysdba <<EOF
SELECT name, value FROM v$dataguard_stats
WHERE name IN ('transport lag', 'apply lag');
EOF
10.3 阈值
- 延迟 > 60s:告警
- GAP:告警
- 状态异常:告警
11. 自动化监控
11.1 脚本
#!/bin/bash
# dg_monitor.sh
sqlplus -s / as sysdba <<EOF
SET PAGES 100
SELECT database_role, protection_mode, protection_level
FROM v$database;
SELECT name, value, unit
FROM v$dataguard_stats;
SELECT process, status, sequence#, delay_mins
FROM v$managed_standby;
EOF
11.2 调度
# crontab
*/5 * * * * /u01/scripts/dg_monitor.sh | mail -s "DG Status" dba@example.com
12. AWR
12.1 报告
@?/rdbms/admin/awrrpt.sql
12.2 Data Guard 指标
- 传输时间
- 应用时间
- 等待事件
12.3 优化
- 网络
- 磁盘
- 进程
13. 常见问题
13.1 延迟高
- 网络
- 磁盘
- 优化
13.2 GAP
- FAL
- 手动
- 修复
13.3 状态异常
- 日志
- 重启
- 修复
14. 最佳实践
- 定期监控:实时
- 告警:阈值
- GAP:及时
- 延迟:监控
- Broker:使用
- 日志:检查
- 自动化:脚本
- OEM:集成
- 演练:故障
- 文档:流程
15. 参考资料
[1] Oracle Data Guard 19c, “Monitoring” https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/