Oracle Data Guard 故障诊断详解

Oracle Data Guard 故障诊断详解

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


1. 概述

Data Guard 故障诊断保证快速定位问题[1]:

详细见:Oracle Data Guard 监控详解Oracle Data Guard 架构详解


2. 常见故障

2.1 传输故障

- 网络中断
- 进程异常
- 归档缺失

2.2 应用故障

- Redo Apply 停止
- SQL Apply 错误
- 数据冲突

2.3 角色转换

- Switchover 失败
- Failover 失败
- 状态异常

3. 诊断工具

3.1 视图

SELECT * FROM v$dataguard_stats;
SELECT * FROM v$managed_standby;
SELECT * FROM v$archive_dest;
SELECT * FROM v$archive_gap;

3.2 Broker

DGMGRL> SHOW CONFIGURATION;
DGMGRL> SHOW DATABASE prod StatusReport;
DGMGRL> SHOW DATABASE stby StatusReport;

3.3 日志

- alert log
- drc<sid>.log
- MRP/LSP trace

4. 传输故障

4.1 ORA-12154

- TNS 解析失败
- 检查 tnsnames.ora
- tnsping

4.2 ORA-12541

- 监听器未启动
- 检查 listener
- lsnrctl status

4.3 ORA-16058

- 备库未 MOUNT
- 检查备库状态
- STARTUP MOUNT

4.4 ORA-16191

- 密码文件不一致
- 重新复制
- orapwd

5. GAP 故障

5.1 检查

-- 备库
SELECT * FROM v$archive_gap;
-- 主库
SELECT * FROM v$archive_dest WHERE dest_id=2;

5.2 修复

# 主库查找缺失归档
rman target /
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> BACKUP AS COPY ARCHIVELOG SEQUENCE 100,101 FORMAT '/tmp/%U';

5.3 注册

-- 备库
ALTER DATABASE REGISTER PHYSICAL LOGFILE '/tmp/arc_100.arc';
ALTER DATABASE REGISTER PHYSICAL LOGFILE '/tmp/arc_101.arc';

6. Apply 故障

6.1 MRP 停止

-- 备库
SELECT process, status FROM v$managed_standby 
WHERE process LIKE 'MRP%';
-- 错误

6.2 日志

- alert log
- MRP trace
- 错误信息

6.3 重启

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

7. SQL Apply 故障

7.1 错误

SELECT event, status FROM v$logstdby_process;
SELECT * FROM dba_logstdby_events;

7.2 跳过

-- 跳过错误事务
EXEC DBMS_LOGSTDBY.SKIP_TRANSACTION(...);

7.3 重启

ALTER DATABASE STOP LOGICAL STANDBY APPLY;
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

8. Switchover 失败

8.1 状态

SELECT switchover_status FROM v$database;
-- NOT ALLOWED:不可
-- SESSIONS ACTIVE:会话

8.2 原因

- GAP 未修复
- 备库未应用
- 会话活跃

8.3 修复

- 修复 GAP
- 启动 Apply
- 终止会话
- 重试

9. Failover 失败

9.1 检查

- GAP 严重
- 数据丢失
- 评估

9.2 手动

-- 备库
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE OPEN;

9.3 重建

- 旧主库不可恢复
- 重建备库
- RMAN DUPLICATE

10. TFA 诊断

10.1 收集

tfactl diagcollect -oreason "data guard"

10.2 分析

- ORA 错误
- 状态
- 日志

详细见:Oracle Trace File Analyzer 详解


11. 网络诊断

11.1 连通

ping standby
tnsping stby
sqlplus sys/pwd@stby as sysdba

11.2 带宽

- iperf
- 网络监控
- 优化

11.3 SQLNet

# sqlnet.ora
SQLNET.INBOUND_CONNECT_TIMEOUT
SQLNET.SEND_QUEUE_SIZE

12. 常见错误

12.1 ORA-16778

- Broker 状态不一致
- 重新同步

12.2 ORA-16810

- 错误状态
- 检查 StatusReport

12.3 ORA-16625

- 无法到达
- 网络
- 检查

13. 预防

13.1 监控

- 实时
- 告警
- 定期

13.2 演练

- 切换
- Failover
- 验证

13.3 文档

- 配置
- 流程
- 故障

14. 最佳实践

  1. 监控:实时
  2. 日志:检查
  3. GAP:及时修复
  4. Broker:管理
  5. TFA:诊断
  6. 演练:故障
  7. 文档:记录
  8. 网络:监控
  9. 密码:一致
  10. 自动化:告警

15. 参考资料

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