必须先执行startup nomount,否则后续RMAN操作均失败;无SPFILE则报ORA-01078,无CONTROLFILE则RMAN无法识别备份集、DBID及数据文件路径。
startup nomount 必须先做,否则后续所有 RMAN 操作都会失败 —— 这不是可选步骤,是硬性前提。
必须先还原 spfile 和 controlfile,不能跳过
没 spfile,startup nomount 就报 ora-01078;没 controlfile,rman 根本不认识备份集里有什么、dbid 是多少、数据文件路径在哪。
常见错误 rman-06172: no autobackup found,90% 是因为:
• 没提前 set dbid(尤其目标库没建过实例时)
• control_files 参数在 pfile/spfile 里写错路径或拼写错误
• 备份片没放在 rman 能扫描到的目录下(比如没 catalog start with)
• 控制文件自动备份没启用,又没指定具体备份片路径
路径不一致时,set newname 必须和 restore/switch 在同一个 run 块里
SET NEWNAME 不是全局设置,只对紧接其后的 RESTORE 生效,且必须包裹在 run { } 中:
• 单独执行 set newname for datafile 1 to '/new/system01.dbf' 再退出 RMAN,下次进 RMAN 就失效
• 漏掉 switch datafile all → 控制文件仍指向旧路径 → recover database 报 ORA-01152
• switch datafile all 只切换你显式 set newname 过的文件,不会自动推导其他文件路径
• 临时文件要单独处理:set newname for tempfile 1 to '/new/temp01.dbf'
挂载后必须校验,不能直接 restore database
执行 alter database mount 后,立刻运行:
• report schema:确认控制文件“认得”所有数据文件,且状态为 ONLINE
• list backup:看 RMAN 是否识别你传过来的备份片
• crosscheck backup + delete noprompt expired:清理控制文件里残留的无效记录,避免误用旧路径
• 如果源库路径是 /u01/oradata/orcl/,目标机建的是 /u01/app/oracle/oradata/orcl/,就得用动态 SQL 生成 set newname 语句:SELECT 'set newname for datafile '||file#||' to '''||REPLACE(name,'/u01/oradata/','/u01/app/oracle/oradata/')||''';' FROM v$datafile;
恢复时间点必须手动指定,RMAN 不会自动选
异地恢复几乎总是“不完全恢复”,因为你不可能把所有归档日志全拷过去。但 RMAN 不会帮你决定截止点:
• 执行前先试跑:restore database until time "to_date('2026-06-24 02:00:00','yyyy-mm-dd hh24:mi:ss')"
• 如果报找不到归档,说明截止时间超出了已有归档范围,得往回调
• recover database until time ... 必须和 restore 配套使用,且 until 时间不能早于备份集的完成时间
• 最后 alter database open resetlogs 是强制动作,漏掉会卡在 MOUNTED 状态
ORACLE_BASE/admin/$ORACLE_SID/adump、fast_recovery_area、oradata 这几个路径缺一不可,哪怕只是空目录。RMAN 在 restore 时不会自动创建父目录,直接报 ORA-19504: failed to create file。


















