备库因主库归档被删导致ORA-00308/ORA-19505报错中断,需以备库控制文件中MIN(FIRST_CHANGE#)为起点,在主库执行RMAN增量备份并传至备库;备库须先CANCEL MRP、MOUNT状态恢复,再用RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL对齐SCN,最后重启MRP。
主库归档被删后备库报 ORA-00308 / ORA-19505
备库自动停止应用、mrp 进程中断,日志里反复出现 ora-00308: cannot open archived log 和 ora-19505: failed to identify file,基本就是归档缺失导致的断链。这不是网络或参数问题,是物理文件不可恢复地丢失了——主库上那些 archivelog 已被 rm -rf 或 rman delete archivelog 清掉,且没备份到磁带或异地存储。
此时不能等主库“再生成一遍”,因为归档序列不连续,备库无法跳过缺口;也不能直接重建 DG,成本太高。核心思路是:用主库当前 SCN 为基准,做一次增量备份,把从最近可用归档起点到当前 SCN 的所有变更“打包”传给备库。
RMAN 增量备份必须从备库控制文件中已知的最低 SCN 开始
不是随便选个 SCN 就能备份。RMAN 需要知道“从哪开始追”。这个起点由备库控制文件记录,可通过以下命令查:
SELECT MIN(SEQUENCE#), MIN(FIRST_CHANGE#) FROM V$ARCHIVED_LOG WHERE APPLIED = 'YES';
结果里的 FIRST_CHANGE# 就是关键 SCN(记作 min_scn)。如果备库完全没应用过归档,V$ARCHIVED_LOG 可能为空,则要用:SELECT CURRENT_SCN FROM V$DATABASE; 在主库查,然后减去约 10 万(留安全余量),作为保守起点。
- 务必在主库执行备份,且目标是备库能访问的共享路径(如 NFS)或拷贝到备库本地
- 命令必须带
FROM SCN <min_scn></min_scn>,不能只用INCREMENTAL LEVEL 1 - 避免用
BACKUP INCREMENTAL FROM SCN ... DATABASE直接备份整个库——太慢;应加PLUS ARCHIVELOG并指定FORMAT控制输出位置
备库恢复前必须先切换到 MOUNT 状态并关闭 MRPR 进程
很多人卡在这步:一边 RMAN 恢复一边还开着 MRP,结果报 ORA-16025: parameter LOG_ARCHIVE_DEST_n contains repeated or invalid attributes 或静默失败。MRP 是只读应用进程,和恢复冲突。
操作顺序不能错:
- 在备库执行:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; - 再执行:
SHUTDOWN IMMEDIATE→STARTUP MOUNT - 确认
V$MANAGED_STANDBY中 MRP 进程状态为NOT APPLYING或已消失 - 恢复命令里必须包含
RECOVER DATABASE NOREDO,否则 RMAN 会尝试找归档(而它们已经没了)
恢复完成后重启 MRP 前要校验控制文件与数据文件 SCN 对齐
增量恢复完直接 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT,大概率报 ORA-01152: file 1 was not restored from a backup taken before the beginning of online backup 或同步卡住。这是因为控制文件里记录的检查点 SCN 和数据文件头不一致。
必须手动同步一次:
- 在备库 MOUNT 状态下运行:
RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL; - 输入
CANCEL(它不会真恢复,只是对齐 SCN) - 再执行:
ALTER DATABASE OPEN READ ONLY;验证能否打开 - 最后才启动 MRP:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
这个对齐动作极容易被跳过,但它是恢复后 MRP 能持续应用的唯一保障。没有它,备库看起来“恢复成功”,实则下一秒就停在第一个新归档上。










