Oracle Data Guard 监控详解

Oracle Data Guard 监控详解

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Data Guard 监控保证灾备可用[1]:

详细见:Oracle Data Guard 架构详解


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" [email protected]

12. AWR

12.1 报告

@?/rdbms/admin/awrrpt.sql

12.2 Data Guard 指标

- 传输时间
- 应用时间
- 等待事件

12.3 优化

- 网络
- 磁盘
- 进程

13. 常见问题

13.1 延迟高

- 网络
- 磁盘
- 优化

13.2 GAP

- FAL
- 手动
- 修复

13.3 状态异常

- 日志
- 重启
- 修复

14. 最佳实践

  1. 定期监控:实时
  2. 告警:阈值
  3. GAP:及时
  4. 延迟:监控
  5. Broker:使用
  6. 日志:检查
  7. 自动化:脚本
  8. OEM:集成
  9. 演练:故障
  10. 文档:流程

15. 参考资料

[1] Oracle Data Guard 19c, “Monitoring” https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/