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. 最佳实践
- 监控:实时
- 日志:检查
- GAP:及时修复
- Broker:管理
- TFA:诊断
- 演练:故障
- 文档:记录
- 网络:监控
- 密码:一致
- 自动化:告警
15. 参考资料
[1] Oracle Data Guard 19c, “Troubleshooting” https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/