Oracle Data Guard 故障案例详解
Oracle Data Guard 故障案例详解
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Data Guard 实战故障案例[1]:
2. 案例 1:GAP 故障
2.1 现象
- 备库延迟
- v$archive_gap 有数据
- Redo 缺失
2.2 诊断
-- 备库
SELECT * FROM v$archive_gap;
-- thread# 1, low_sequence# 100, high_sequence# 105
2.3 修复
# 主库查找归档
rman target /
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> BACKUP AS COPY ARCHIVELOG SEQUENCE BETWEEN 100 AND 105 FORMAT '/tmp/%U';
scp /tmp/arc_* stby:/tmp/
-- 备库
ALTER DATABASE REGISTER PHYSICAL LOGFILE '/tmp/arc_100.arc';
ALTER DATABASE REGISTER PHYSICAL LOGFILE '/tmp/arc_101.arc';
2.4 验证
SELECT * FROM v$archive_gap;
-- 无数据
3. 案例 2:密码文件不一致
3.1 现象
- ORA-16191
- Redo 传输失败
- 备库未同步
3.2 诊断
- 主备 SYS 密码不同
- 密码文件不一致
3.3 修复
# 主库
orapwd file=$ORACLE_HOME/dbs/orapwprod password=****** force=y
# 复制
scp $ORACLE_HOME/dbs/orapwprod stby:$ORACLE_HOME/dbs/orapwstby
3.4 验证
-- 备库
SELECT process, status FROM v$managed_standby;
-- RFS 运行
4. 案例 3:Standby Redo Log 满
4.1 现象
- 传输延迟
- Standby Redo 未归档
- 备库慢
4.2 诊断
SELECT group#, status, bytes/1024/1024 AS mb
FROM v$standby_log;
-- ACTIVE:未归档
4.3 修复
-- 增加组
ALTER DATABASE ADD STANDBY LOGFILE GROUP 8
('/u01/redo/s08.log') SIZE 50M;
-- 调整归档
ALTER SYSTEM SET log_archive_max_processes=4;
4.4 验证
SELECT * FROM v$dataguard_stats;
-- 延迟正常
5. 案例 4:Switchover 失败
5.1 现象
- Switchover 失败
- ORA-16139
- 状态异常
5.2 诊断
SELECT switchover_status FROM v$database;
-- NOT ALLOWED
5.3 修复
- 检查 GAP
- 启动 Apply
- 终止会话
-- 备库
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
-- 等待同步
-- 主库
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY
WITH SESSION SHUTDOWN;
5.4 验证
DGMGRL> SHOW CONFIGURATION;
6. 案例 5:备库数据文件缺失
6.1 现象
- 主库新增数据文件
- 备库未创建
- Apply 停止
6.2 诊断
-- 备库 alert log
-- ORA-01111
-- 文件不存在
6.3 修复
-- 备库
ALTER DATABASE CREATE DATAFILE '/u01/oradata/users02.dbf'
AS '/u01/oradata/users02.dbf';
-- 或
ALTER SYSTEM SET standby_file_management='AUTO';
6.4 验证
SELECT file_name FROM dba_data_files;
-- 一致
7. 案例 6:网络中断
7.1 现象
- 网络中断
- Redo 传输停止
- 延迟增加
7.2 诊断
ping stby
tnsping stby
7.3 修复
- 修复网络
- FAL 自动同步
- 验证
7.4 验证
SELECT * FROM v$dataguard_stats;
-- 延迟恢复
8. 案例 7:MRP 停止
8.1 现象
- MRP 进程停止
- Apply 停止
- 延迟增加
8.2 诊断
SELECT process, status FROM v$managed_standby
WHERE process LIKE 'MRP%';
-- ERROR/STOPPED
8.3 修复
-- 检查 alert log
-- 修复错误
-- 重启
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
8.4 验证
SELECT process, status FROM v$managed_standby;
-- APPLYING LOG
9. 案例 8:Far Sync 故障
9.1 现象
- Far Sync 故障
- 零丢失中断
- 主库降级
9.2 诊断
DGMGRL> SHOW FAR_SYNC farsync;
9.3 修复
- 启动 Far Sync
- 或切换备用 Far Sync
- 恢复
9.4 验证
SELECT protection_mode, protection_level FROM v$database;
-- 一致
10. 经验总结
10.1 预防
- 监控
- 告警
- 定期检查
10.2 响应
- 快速
- 诊断
- 修复
10.3 文档
- 故障记录
- 解决方案
- 改进
11. 最佳实践
- 监控:实时
- 告警:及时
- GAP:修复
- 密码:一致
- Standby Redo:足够
- 网络:冗余
- 演练:故障
- 文档:记录
- 自动化:修复
- 改进:持续
12. 参考资料
[1] Oracle Data Guard 19c, “Troubleshooting” https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/