应直接在备库执行select thread#, low_sequence#, high_sequence# from v$archive_gap;获取缺失日志起止序列号,并同步查询v$managed_standby确认mrp状态是否为wait_for_gap或not active,再结合主库v$archived_log验证日志是否存在。
备库出现 v$archive_gap 记录,说明主库有归档、备库没收到或没注册——这不是“慢”,是“断”。必须先确认缺口范围,再决定是拷日志还是做增量备份,不能直接开mrp硬冲。
怎么快速定位Gap起止序列号?
别猜,直接查视图。在备库用 sysdba 执行:
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
返回结果里的 LOW_SEQUENCE# 和 HIGH_SEQUENCE# 就是缺失范围。注意:V$ARCHIVE_GAP 只反映最近一次 MRP 扫描后的缺口,如果 MRP 已停,这个视图可能为空;所以得同步看 V$MANAGED_STANDBY:
SELECT process, status, sequence# FROM V$MANAGED_STANDBY WHERE process = 'MRP0';
若 status 是 WAIT_FOR_GAP 或 NOT ACTIVE,说明 MRP 卡住了,得先处理它,而不是急着传日志。
主库上怎么确认缺失日志还在不在?
拿到 LOW_SEQUENCE# 和 HIGH_SEQUENCE# 后,去主库查对应归档是否存在:
SELECT NAME, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG WHERE THREAD# = 1 AND SEQUENCE# BETWEEN <code>low_seq</code> AND <code>high_seq</code> AND DEST_ID = 1;
常见情况分两类:
- 查到记录且
NAME路径下文件真实存在 → 日志没丢,只是没传过去,走手动拷贝+注册流程 - 查不到记录,或路径下文件已删/损坏 → 日志丢失,必须用 RMAN 增量备份修复,别试 FAL 或重传
顺手检查传输状态:SELECT dest_name, status, error FROM V$ARCHIVE_DEST_STATUS WHERE dest_id = 2;,error 列非空就说明传输链路本身有问题(比如 LOG_ARCHIVE_DEST_2 配置错、网络不通、权限不足)。
RMAN 增量备份修复时 SCN 必须取自备库
这是最容易翻车的点:SCN 错了,备份就废了。不是取主库 CURRENT_SCN,也不是手估一个值,而是严格执行:
SELECT CHECKPOINT_CHANGE# FROM V$DATABASE;
这条 SQL 必须在备库上跑,结果就是你要用的 SCN。然后在主库 RMAN 中执行:
BACKUP INCREMENTAL FROM SCN <code>xxx</code> DATABASE FORMAT '/tmp/incr_%U.bkp' TAG 'DG_GAP_FIX';
关键细节:
- 执行前必须停掉备库的 MRP:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; - 备份完立刻
scp到备库本地磁盘,别走 NFS 或共享挂载 - 恢复前要重建备用控制文件(用主库生成的控制文件备份),否则
RECOVER DATABASE NOREDO会报ORA-01152 -
DB_RECOVERY_FILE_DEST和备份存放路径不能在同一磁盘分区,否则恢复时可能因空间不足失败
手动注册归档日志为什么常失败?
不是命令写错,而是文件校验过严。RFS 进程对归档日志的 mtime、size、block checksum 都做校验,哪怕 scp 时加了 -p,某些 NFS 或远程挂载场景仍会改时间戳。这时 ALTER DATABASE REGISTER PHYSICAL LOGFILE 会拒绝注册。
绕过方法是用 OR REPLACE 强制覆盖:
ALTER DATABASE REGISTER OR REPLACE PHYSICAL LOGFILE '<code>/path/to/arch_1_1173.dbf</code>';
但注意:只对已确认内容完整、未被篡改的归档文件用这个,否则可能引入逻辑坏块。注册完别忘了再跑一遍:RECOVER AUTOMATIC STANDBY DATABASE;,让 MRP 继续应用。
Gap 修复最耗时间的环节往往不是操作本身,而是反复确认 SCN、路径、权限、磁盘空间这些“边缘条件”——尤其是跨版本(11g/12c/18c)时,RECOVER ... FROM SERVICE 等新语法不兼容旧环境,强行套用会卡在 catalog 注册阶段。











