SET NEWNAME必须在RESTORE DATABASE前显式指定,RMAN不会自动适配目标机路径;漏设会导致ORA-01157或RMAN-06023错误,且必须与RESTORE、SWITCH、RECOVER同处一个RUN块,并配合SWITCH DATAFILE ALL更新控制文件路径。
rman 不会自动适配目标机路径,restore database 默认照搬备份时记录的绝对路径(比如 +data/orcl/datafile/system.256.987654321),而目标机很可能没挂载 asm 磁盘组,或目录根本不存在。漏掉 set newname 就会卡在 ora-01157 或 rman-06023。
实操要点:
SELECT FILE#, NAME FROM V$DATAFILE;
/u01/oradata/NEWDB/
RUN 块逐个设置,不能只写一条:SET NEWNAME FOR DATAFILE 1 TO '/u01/oradata/NEWDB/system01.dbf';SET NEWNAME FOR DATAFILE 2 TO '/u01/oradata/NEWDB/sysaux01.dbf';
SWITCH DATAFILE ALL; ——这步才真正把控制文件里记录的路径更新为新路径SELECT 'SET NEWNAME FOR DATAFILE ' || FILE# || ' TO ''' || '/u01/oradata/NEWDB/' || SUBSTR(NAME, INSTR(NAME, '/', -1) + 1) || ''';' FROM V$DATAFILE;
RECOVER DATABASE 不会读你改过的 LOG_ARCHIVE_DEST_1 参数,它默认去找备份时归档日志存放的原始路径(比如 /u01/app/oracle/archivelog)。目标机上该路径若不存在或为空,就会报 ORA-00308 找不到归档。
实操要点:
RMAN 里没有 SET ARCHIVELOG DEST 命令——执行直接报错 RMAN-00571
MOUNT 状态下运行 ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/app/oracle/archivelog' SCOPE=SPFILE;
mkdir -p /u01/app/oracle/archivelog
RECOVER 阶段会因缺日志中断如果用了 RESTORE CONTROLFILE 或 CREATE CONTROLFILE,新控制文件里没有源库后续的备份记录,LIST BACKUP 会返回空,RESTORE DATABASE 找不到备份片,报 RMAN-06023。
实操要点:
DBID 正确:SELECT DBID FROM V$DATABASE;,和你在 RMAN 中 SET DBID 的值必须一致CATALOG START WITH '/u01/backup/';(注意末尾斜杠)CATALOG 也会失败——得先挂载或改用文件系统路径存放备份CONFIGURE CONTROLFILE AUTOBACKUP ON 默认开启,但自动备份可能落在 $ORACLE_BASE/fast_recovery_area,升级后该目录常为空或权限不足,需查 V$RECOVERY_FILE_DEST 确认源库启用了 db_create_file_dest='+RECO',目标库却配成 /u01/app/oracle/oradata/PROD,RMAN 还原时仍会尝试写入 ASM 伪路径,报 ORA-19573 或 ORA-19870。
实操要点:
ALTER SYSTEM RESET db_create_file_dest SCOPE=SPFILE;,再重启db_file_name_convert 映射路径:db_file_name_convert='/u01/old/db/','/u01/new/db/'
db_create_file_dest > db_file_name_convert,两者都设时前者生效log_file_name_convert,否则 ALTER DATABASE OPEN RESETLOGS 可能失败路径映射不是一次性配置,而是贯穿 restore、recover、open 全流程的连环动作。最容易被跳过的是归档路径准备和 CATALOG START WITH,这两处一漏,整个恢复就卡在“找不到东西”上,错误提示却不直接说清原因。