rman不会自动识别手动拷贝的归档日志,必须用catalog命令注册;归档缺失时应优先使用set until scn跳过断点,或通过主库增量备份+备库noredo恢复实现scn对齐。

归档日志缺失时RMAN不会自动跳过,必须显式注册才能识别
你把归档文件 1_11_770379421.dbf 手动拷到 DB_RECOVERY_FILE_DEST 目录下,LIST ARCHIVELOG ALL 依然查不到——Oracle 不扫描目录,控制文件里没记录,就等于不存在。这不是路径错了,是根本没“告诉”数据库这个文件存在。
必须用 CATALOG 命令注册:
- 先解压/还原归档到临时路径,比如
/tmp/arch_restored/ - RMAN 连接后执行:
CATALOG START WITH '/tmp/arch_restored/' - 验证是否成功:
LIST ARCHIVELOG FROM SEQUENCE 11,状态应为A(Available) - 若报错
already cataloged,说明控制文件中已有同名归档(时间戳可能是 2026-05-03),需先执行CHANGE ARCHIVELOG UNCATALOG再重试
SET UNTIL SCN 是绕过缺失归档最稳妥的方式
用 SET UNTIL SEQUENCE 12 会失败,哪怕 12 和 13 都在,只要 11 缺失,它就直接报错退出。因为该命令强制要求所有 ≤12 的归档全部存在。
SET UNTIL SCN 才能精准跳过断点:
- 查已有归档边界:
SELECT MIN(FIRST_CHANGE#), MAX(NEXT_CHANGE#) FROM V$ARCHIVED_LOG WHERE SEQUENCE# IN (10,12) - 查当前库 SCN:
SELECT CURRENT_SCN FROM V$DATABASE - 选一个明确落在已有归档
NEXT_CHANGE#之后、缺失归档FIRST_CHANGE#之前的 SCN,例如10879000000050 - RMAN 中执行:
SET UNTIL SCN 10879000000050,再RECOVER DATABASE
RECOVER DATABASE NOREDO 只适用于备库重建场景
这个命令不是“跳过归档”的通用开关,而是 DataGuard 备库修复中的专用操作,有严格前提:
- 必须先
ALTER DATABASE MOUNT,不能OPEN - 控制文件已还原,数据文件来自主库的增量备份
-
NOREDO表示跳过归档应用,只做块级一致性修复,依赖的是备份时刻 SCN 与当前控制文件匹配 - 在主库或未重建控制文件的备库上误用,会触发
ORA-00344或控制文件校验失败
增量备份前滚是主库归档丢失后的首选方案
当归档确实不可恢复(比如主库已删除且无备份),又必须让备库追平,RMAN 增量备份是唯一可行路径,核心在于 SCN 对齐:
- 备库停 MRP:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL - 取最小 SCN:
SELECT MIN(CHECKPOINT_CHANGE#) FROM V$DATAFILE_HEADER(比CURRENT_SCN更安全) - 主库执行:
BACKUP INCREMENTAL FROM SCN <scn> DATABASE FORMAT '/tmp/ForStandby_%U'</scn> - 备库先恢复 standby 控制文件,再
CATALOG START WITH '/tmp/ForStandby',最后RECOVER DATABASE NOREDO
整个过程不依赖任何归档日志,但必须确保主库在该 SCN 之后没有发生结构变更(如新增 datafile 未同步),否则需额外处理路径映射和文件注册。











