异机恢复oracle 19c必须确保源库与目标主机的oracle版本、字长、操作系统完全一致,dbid相同且不连接恢复目录;需手动对齐目录结构、参数文件路径,并用catalog start with精确注册备份文件,补全归档日志后方可recover database。
必须先确认源库与目标主机的 oracle 版本、字长(64 位)、操作系统大类(linux/windows)完全一致,否则 restore controlfile 阶段就会失败——不是报错,而是控制文件能还原但后续 restore database 找不到数据文件路径,因为内部路径哈希校验不通过。
确保 DBID 一致且避免恢复目录干扰
RMAN 异机恢复本质是“同 DBID 复制”,所以目标库不能注册到和源库共用的恢复目录中,否则 CATALOG START WITH 会把备份元数据混入源库上下文,导致 RESTORE DATABASE 选错备份集或跳过归档日志。
- 若源库用了恢复目录,目标主机执行 RMAN 时**绝对不要连接 catalog**:直接
rman target /即可 - 必须提前从源库查出 DBID:
SELECT dbid FROM v$database;,写死记在纸上,后面验证控制文件是否匹配就靠它 - 如果只是测试恢复(非长期替代),恢复完立即
SHUTDOWN IMMEDIATE,别注册、别启监听、别建服务
参数文件与目录结构必须手动对齐
Oracle 19c 不再允许 RESTORE CONTROLFILE 后自动适配路径差异。控制文件里硬编码了所有数据文件、联机日志、归档路径,这些路径在目标主机上必须真实存在且权限正确,否则 ALTER DATABASE MOUNT 就卡住。
- 先用
CREATE PFILE FROM SPFILE导出源库 pfile,再手动修改以下参数:control_files→ 改成目标主机实际路径(如/u01/app/oracle/oradata/NEWDB/control01.ctl)db_recovery_file_dest→ 指向目标主机归档目录(如/u01/app/oracle/fast_recovery_area/NEWDB)db_create_file_dest和diagnostic_dest也需同步更新 - mkdir 不能漏:控制文件路径父目录、
oradata/NEWDB、fast_recovery_area/NEWDB、admin/NEWDB/adump等全得手工建好 - chown oracle:oinstall -R 所有新建目录,否则
STARTUP NOMOUNT PFILE=...会静默失败
catalog start with 必须指向物理存在的备份文件目录
CATALOG START WITH 不是“扫描子目录”,而是递归列出该路径下所有符合 RMAN 备份片命名规则(如 *_db_%U、*_arch_%U)的文件,并将它们注册进控制文件的备份记录表。如果路径错、权限低、或文件名被重命名过(比如加了 .bak 后缀),RMAN 就看不到备份。
- 备份文件复制到目标主机后,先
ls -l /backup/*.bak确认文件完整、时间戳合理、无隐藏字符 -
CATALOG START WITH '/backup'中的/backup必须是绝对路径,且结尾**不能带斜杠**(/backup/会导致部分版本忽略该目录) - 执行后立刻跟
LIST BACKUP SUMMARY;,核对输出的 BS Key 数量是否与源库LIST BACKUP OF DATABASE;一致;不一致说明没扫到 - 如果归档日志备份分散在多个目录(如
/arch_bak/和/arch_bak_old/),要分别执行两次CATALOG START WITH
recover database 之前必须补全归档日志物理文件
RECOVER DATABASE 不会联网拉日志,只读取控制文件里记录的归档路径(即 LOG_ARCHIVE_DEST_1 对应位置)。如果目标主机该路径下缺某几个归档(比如只复制了最近 2 天,但恢复需要到 SCN 9441028,而它落在第 3 天),命令会停在“applying archive log”并报 ORA-00308: cannot open archived log。
- 先在源库查清楚恢复终点所需的归档范围:
SELECT NAME, FIRST_CHANGE#, NEXT_CHANGE# FROM V$ARCHIVED_LOG WHERE NEXT_CHANGE# > 9441028 AND FIRST_CHANGE# - 把对应
NAME列出的归档文件(如/u01/arch/1_100_1234567890.dbf)全部 scp 到目标主机的LOG_ARCHIVE_DEST_1路径下 - 如果目标主机归档路径与源库不同(比如源是
/u01/arch,目标设为/u01/app/oracle/fast_recovery_area/NEWDB/archivelog),就得在目标主机上建软链:ln -s /u01/app/oracle/fast_recovery_area/NEWDB/archivelog /u01/arch,否则 RMAN 不认
最易被忽略的是控制文件中记录的归档日志序列号(SEQUENCE#)与物理文件名是否严格对应——Oracle 19c 默认归档名格式是 %t_%s_%r.dbf,其中 %s 就是序列号。如果手动复制时改了名(比如把 1_100_1234567890.dbf 改成 arch_100.dbf),RECOVER 就永远找不到它。











