备份cdb用backup database,恢复cdb必须先startup nomount、再alter database mount,然后执行restore database和recover database,最后alter database open resetlogs;所有操作须以sysdba权限连接cdb$root,且不能在open状态下执行restore。

直接回答:备份CDB用 backup database,恢复CDB必须先启动到 mount 状态,再 restore database + recover database,最后 alter database open resetlogs。不能跳过 mount 阶段,也不能在 open 状态下执行 restore。
RMAN连接CDB root是前提
所有针对CDB整体的备份/恢复操作,必须以具有 SYSDBA 或 SYSBACKUP 权限的用户连接到 CDB$ROOT(即根容器),而不是某个PDB。连接方式错误会导致命令不可用或权限拒绝:
-
rman target /—— 本地OS认证,前提是当前用户是oracle且属于oinstall和dba组 -
rman target "sys/oracle@cdb1 as sysdba"—— 使用密码和TNS别名连接,注意引号不能省略 - 如果误连到PDB(如
rman target /@pdb1),执行backup database会报错ORA-01219: database not open: queries allowed on fixed tables or views only,因为PDB视角下“database”不包含控制文件、参数文件等CDB级对象
备份CDB时哪些文件会被包含?
backup database 命令在CDB root下运行时,会自动包含:
- CDB$ROOT 的所有数据文件(
SYSTEM、SYSAux、UNDO、TEMP) - 所有已打开的PDB的数据文件(无论是否处于
READ WRITE或READ ONLY状态) - 当前控制文件(
current controlfile) - SPFILE(如果使用了SPFILE启动)
- 归档日志(仅当显式加上
plus archivelog)
但以下文件永远不会被RMAN备份:
-
redo log文件(在线日志)—— RMAN明确禁止备份 -
password file—— 必须手动拷贝 -
alert.log、trace文件 —— 属于诊断目录,不在备份范围内 -
tempfile—— 临时文件不参与一致性备份,恢复后由Oracle自动重建
恢复CDB必须按顺序做三件事
恢复不是简单反向执行备份命令。CDB恢复失败最常见的原因是步骤错乱或状态不对:
- 目标实例必须处于
nomount→mount状态,不能是open。否则restore database会报ORA-01127: database name 'CDB1' exceeds 8 characters或更隐蔽的控制文件冲突 - 若没有可用的自动备份控制文件,需先
restore controlfile from '<path>'</path>或从备份集中还原,否则restore database会提示no backup of control file found -
recover database依赖归档日志连续性;如果归档缺失,RMAN会停在第一个gap处,报ORA-19625: error identifying file ... ORA-27037: unable to obtain file status,此时需补全归档或使用until sequence指定可恢复点
示例关键流程:
rman target / startup nomount restore spfile from '/backup/cdb1_spfile.bkp'; shutdown immediate; startup nomount; restore controlfile from '/backup/cdb1_control.bkp'; alter database mount; restore database; recover database; alter database open resetlogs;
备份路径与恢复目录容易被忽略的细节
默认备份写入 $ORACLE_BASE/fast_recovery_area,但生产环境几乎总会改用自定义路径。这直接影响恢复时的可定位性:
- 备份时用了
format '/u01/backup/%U',恢复时RMAN不会自动识别该路径,必须先catalog start with '/u01/backup/'让RMAN扫描并注册备份集 - 若启用了恢复目录(recovery catalog),恢复前需
connect catalog rman/rc@catdb,否则RMAN只查控制文件里的记录,可能找不到早于控制文件保留窗口的备份 - 异机恢复时,备份文件权限必须为
oracle:oinstall且可读;常见坑是scp传输后属主变成root,导致restore报ORA-19505: failed to identify file
最易被跳过的一步:恢复完成后,检查 v$database.open_mode 是否为 READ WRITE,并确认所有PDB状态(select con_id, name, open_mode from v$pdbs)。有时CDB open了,但个别PDB仍为 MOUNTED,需手动 alter pluggable database pdb1 open。











