Oracle Data Guard Gap 修复详解
Oracle Data Guard Gap 修复详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
GAP 是 Data Guard 常见问题[1]:
详细见:Oracle Redo 传输详解、Oracle Data Guard 故障诊断详解。
2. GAP 概念
2.1 定义
- 备库缺失归档
- Redo 传输中断
- 备库落后
2.2 原因
- 网络中断
- 磁盘空间
- 备库故障
- 主库归档丢失
2.3 影响
- 数据延迟
- 灾备风险
- 切换问题
3. GAP 检测
3.1 v$archive_gap
-- 备库
SELECT * FROM v$archive_gap;
-- thread#, low_sequence#, high_sequence#
3.2 v$archive_dest
SELECT dest_id, status, error, gap_status
FROM v$archive_dest WHERE dest_id=2;
3.3 序列对比
-- 主库
SELECT max(sequence#) FROM v$archived_log WHERE dest_id=2;
-- 备库
SELECT max(sequence#) FROM v$archived_log WHERE applied='YES';
4. FAL 自动修复
4.1 FAL
- Fetch Archive Log
- 备库自动请求
- 自动修复
4.2 配置
-- 备库
ALTER SYSTEM SET fal_server='prod';
ALTER SYSTEM SET fal_client='stby';
4.3 验证
- 自动
- 检查
- 修复
5. 手动修复
5.1 查找归档
# 主库
rman target /
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> LIST ARCHIVELOG SEQUENCE BETWEEN 100 AND 105;
5.2 备份归档
# 主库
RMAN> BACKUP AS COPY ARCHIVELOG SEQUENCE BETWEEN 100 AND 105
FORMAT '/tmp/arc_%U';
# 传输
scp /tmp/arc_* stby:/tmp/
5.3 注册
-- 备库
ALTER DATABASE REGISTER PHYSICAL LOGFILE '/tmp/arc_100.arc';
ALTER DATABASE REGISTER PHYSICAL LOGFILE '/tmp/arc_101.arc';
-- 或
ALTER DATABASE REGISTER OR REPLACE PHYSICAL LOGFILE '/tmp/arc_100.arc';
5.4 验证
SELECT * FROM v$archive_gap;
-- 无数据
6. 增量备份修复
6.1 大 GAP
- GAP 太大
- 归档丢失
- 增量备份
6.2 流程
# 主库
# 查找备库 SCN
sqlplus / as sysdba @stby
SELECT current_scn FROM v$database;
# 主库增量备份
rman target /
RMAN> BACKUP INCREMENTAL FROM SCN 1234567890
DATABASE FORMAT '/tmp/inc_%U';
# 传输
scp /tmp/inc_* stby:/tmp/
6.3 恢复
-- 备库
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- RMAN 恢复
rman target /
RMAN> CATALOG START WITH '/tmp/inc_';
RMAN> RECOVER DATABASE NOREDO;
6.4 重启
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
7. 重建备库
7.1 严重 GAP
- GAP 严重
- 无法修复
- 重建
7.2 RMAN DUPLICATE
rman target sys/xxx@prod auxiliary sys/xxx@stby
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE;
7.3 验证
SELECT database_role, open_mode FROM v$database;
SELECT * FROM v$archive_gap;
8. 预防
8.1 监控
- v$archive_gap
- 延迟
- 告警
8.2 网络
- 冗余
- 监控
- 修复
8.3 空间
- 归档空间
- FRA
- 监控
8.4 备份
- 归档备份
- 多重
- 安全
9. 自动化
9.1 脚本
#!/bin/bash
# gap_check.sh
sqlplus -s / as sysdba <<EOF
SELECT * FROM v$archive_gap;
EOF
9.2 告警
- GAP 告警
- 通知
- 响应
9.3 修复
- 自动 FAL
- 手动
- 重建
10. 常见问题
10.1 FAL 不工作
- 配置
- fal_server
- 检查
10.2 归档丢失
- 增量备份
- 或重建
- 评估
10.3 重建慢
- 大库
- Active Database
- 优化
11. 最佳实践
- 监控:GAP
- FAL:配置
- 网络:冗余
- 空间:足够
- 备份:归档
- 自动化:检测
- 告警:及时
- 测试:修复
- 文档:流程
- 演练:GAP
12. 参考资料
[1] Oracle Data Guard 19c, “Resolving Archive Gaps” https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/