catalog start with仅在控制文件缺失备份记录时有效,适用于恢复旧/手工控制文件、物理备库同步滞后等场景;必须用带尾斜杠的绝对路径(如'/backup/full/'),扫描备份片、归档日志等当前dbid匹配的文件,不跨库、不处理损坏文件,执行后须验证list backup与v$backup_piece。

必须先确认控制文件里缺备份记录,否则执行 CATALOG START WITH 没效果,还可能误触发重复注册或报错。
什么时候该用 CATALOG START WITH
这个命令只在以下场景真正有用:
- 你刚用
RESTORE CONTROLFILE恢复了一个旧的或手工重建的控制文件,它里面没有当前磁盘上已有的备份集信息 - 数据库是物理备库,且从主库拉过来的控制文件没同步上本地新生成的归档日志或备份片
- RMAN 报错类似
ORA-19625: error identifying file ... ORA-27037: unable to obtain file status,但你确认文件物理存在 - 你明确知道备份文件放在某个路径下(比如
/backup/full/),但 RMANLIST BACKUP查不到
CATALOG START WITH 的路径写法必须带尾部斜杠
命令语法看着简单,但路径写错就完全扫描不到文件:
- 正确写法:
CATALOG START WITH '/backup/full/'(结尾有/) - 错误写法:
CATALOG START WITH '/backup/full'(不带/,RMAN 会当作文件名而非目录处理) - 路径必须是绝对路径,不能用
$ORACLE_HOME或环境变量,RMAN 不解析 shell 变量 - 如果备份分散在多个目录,要逐条执行,比如:
CATALOG START WITH '/backup/arch/'、CATALOG START WITH '/backup/incr/'
它能扫哪些文件?不能扫什么?
CATALOG START WITH 实际上是让 RMAN 递归扫描目录树,识别并注册以下类型的文件头信息:
- 所有
.bkp或无后缀的备份片(BACKUPPIECE) - 归档日志文件(
ARCHIVELOG),只要文件头校验通过 - 数据文件拷贝(
DATAFILECOPY),前提是它们属于当前数据库(DBID匹配) - 控制文件拷贝(
CONTROLFILECOPY),但不会自动替换当前控制文件
它不能:
- 跨数据库注册——文件所属的
DBID必须和当前目标库一致,否则报错ORA-19689: cannot catalog file from different database - 识别损坏或截断的备份片——RMAN 会跳过无法读取文件头的文件,不报错也不提示
- 替代
CATALOG ARCHIVELOG手动注册单个归档——如果只有几个归档缺失,直接用CATALOG ARCHIVELOG '/path/to/1_100.dbf'更快更准
执行后必须验证,别信“成功完成”就完事
命令返回 cataloged backup piece 或 cataloged archivelog 并不代表全部注册成功:
- 立即运行
LIST BACKUP SUMMARY和LIST ARCHIVELOG ALL,确认数量是否匹配你预期的文件数 - 检查是否有
EXPIRED状态的备份——说明 RMAN 扫到了文件,但校验失败(常见于归档被移动过或权限不对) - 如果后续
RESTORE DATABASE还报找不到备份,再查V$BACKUP_PIECE和V$ARCHIVED_LOG视图,确认STATUS = 'A'(Available) - 注意:
CATALOG START WITH不会更新恢复目录(Recovery Catalog),只写入控制文件;如果你用了独立的 catalog 库,还得额外RESYNC CATALOG
最常被忽略的一点:它只解决“RMAN 看不见备份”的问题,不解决备份本身损坏、路径权限不足、ASM 别名未同步等底层问题。先确保文件可读、DBID 一致、控制文件已 mount,再跑这个命令。











