必须先启动到NOMOUNT,再ALTER DATABASE MOUNT,然后才能执行RESTORE DATABASE和RECOVER DATABASE;跳过MOUNT或在OPEN状态下执行RESTORE必然失败。

必须先启动到 NOMOUNT,再 ALTER DATABASE MOUNT,然后才能执行 RESTORE DATABASE 和 RECOVER DATABASE;跳过 MOUNT 或在 OPEN 状态下执行 RESTORE 必然失败。
连接目标必须是 CDB$ROOT,且权限为 SYSDBA
RMAN 所有针对 CDB 整体的恢复动作,只认 CDB$ROOT 容器。连错 PDB(比如用 rman target /@pdb1)会导致 BACKUP DATABASE 报 ORA-01219,而恢复时直接无法识别控制文件或数据文件路径。
- 正确连接方式:
rman target /(本地 OS 认证,当前用户必须是oracle,且属于oinstall和dba组) - 或:
rman target "sys/oracle@orcl as sysdba"(注意引号不能省,orcl是 CDB 实例名,不是 PDB 服务名) - 验证当前容器:
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM DUAL;—— 必须返回CDB$ROOT
恢复前数据库状态必须为 MOUNT(非 OPEN,也非 NOMOUNT 单独存在)
RESTORE DATABASE 要求实例已加载控制文件,但尚未打开数据库;NOMOUNT 阶段没有控制文件可读,OPEN 阶段又锁住了数据文件,RMAN 会拒绝操作并报 ORA-01127 或静默失败。
- 标准启动流程:
STARTUP NOMOUNT→ALTER DATABASE MOUNT - 如果控制文件损坏或丢失,需先执行
RESTORE CONTROLFILE FROM '<path>'</path>或从备份集还原,否则RESTORE DATABASE会提示no backup of control file found - SPFILE 若丢失,也得先
RESTORE SPFILE,再STARTUP NOMOUNT重新加载
restore 和 recover 必须成对、按序执行,且依赖归档日志连续性
RESTORE DATABASE 只负责把备份中的数据文件拷贝回磁盘;RECOVER DATABASE 才真正应用归档日志前滚事务、回滚未提交变更。两者缺一不可,顺序也不能颠倒。
- 常见错误:只做
RESTORE就ALTER DATABASE OPEN RESETLOGS→ 报ORA-01113或ORA-01157,因为文件头 SCN 不一致 - 归档日志缺失时,
RECOVER DATABASE会在第一个 gap 处卡住,报ORA-19625+ORA-27037,不会自动跳过 - 确认归档可用:
SELECT NAME, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG WHERE FIRST_TIME >= TO_DATE('2026-08-26', 'YYYY-MM-DD') ORDER BY FIRST_TIME; - 恢复完成后必须用
ALTER DATABASE OPEN RESETLOGS—— 这不是可选项,是强制重置日志序列的必要步骤
哪些文件不会被自动包含,必须手动处理
BACKUP DATABASE 命令在 CDB$ROOT 下运行时,不会备份在线日志、密码文件、临时文件和诊断日志。这些在恢复后需单独应对。
-
redo log文件不参与备份,恢复后由 Oracle 自动重建,但路径必须与控制文件记录一致;若路径变更,需在OPEN RESETLOGS前用ALTER DATABASE ADD LOGFILE重建 -
password file必须提前手动拷贝到新环境对应位置(如$ORACLE_HOME/dbs/orapw<sid>),否则SYSDBA登录失败 -
tempfile不备份,OPEN RESETLOGS后自动创建;但若原TEMP表空间路径不可写,会卡在OPEN阶段,需先ALTER TABLESPACE TEMP ADD TEMPFILE
最容易被忽略的是归档日志链的完整性检查——它不报错,但会让 RECOVER DATABASE 在后台停住不动,看起来像“卡死”,实际是等一个永远等不到的归档 sequence。


















