BACKUP DATABASE ROOT 仅备份 CDB$ROOT 的数据文件、控制文件和 SPFILE,明确排除 PDB$SEED 与所有用户 PDB;其范围由命令本身限定,不依赖 PDB 状态,也不包含外部配置文件。
直接结论:用 backup database root 就能只备份 cdb$root,不碰任何 pdb,包括 pdb$seed。
为什么 BACKUP DATABASE 不等于“全备整个CDB”
很多人以为在 CDB 根下执行 BACKUP DATABASE 就自动包含所有 PDB,实际不是。它只备份当前 OPEN 状态的容器——默认只有 CDB$ROOT 和 PDB$SEED(因为 PDB$SEED 总是 READ ONLY OPEN),而你创建的用户 PDB(如 PDB1)如果处于 MOUNT 或 CLOSED 状态,就完全不会被纳入备份集。
这导致一种典型误判:RMAN 报告“backup completed”,但恢复时发现 PDB 数据根本不在备份里。
-
BACKUP DATABASE的行为取决于运行时各 PDB 的OPEN_MODE,不是配置或命名决定的 -
PDB$SEED被包含是因为它固定 OPEN,不是因为“它是种子”这个身份被特殊识别 - 归档日志(
ARCHIVELOG)部分不受影响,仍覆盖全 CDB;但数据文件只来自当前 OPEN 容器
BACKUP DATABASE ROOT 的真实作用范围
这条命令明确限定只备份根容器的数据文件、控制文件快照、SPFILE 副本(如果启用了 CONFIGURE CONTROLFILE AUTOBACKUP ON),且严格排除:PDB$SEED、所有用户 PDB、甚至 SYSTEM 以外的任何容器级对象。
它等价于手动列出并只指定 CDB$ROOT 的数据文件,但更安全、不易漏。
- 不需要提前确认 PDB 状态,也不受其影响
- 备份集里
LIST BACKUPSET显示的文件名中不含任何 PDB 名称或容器 ID - 恢复时只能用于还原 CDB$ROOT,不能用来 restore 或 recover 任意 PDB
常见错误与绕过陷阱的操作建议
最常踩的坑是混淆“连接位置”和“备份目标”。比如在 CDB 根下连 RMAN,却误以为 BACKUP PLUGGABLE DATABASE pdb1 能生效——其实这条命令语法合法,但执行会失败,报 ORA-65040 或静默跳过,除非你已满足全部三个前提:
- 必须在 CDB 根容器中连接 RMAN(
CONNECT TARGET /后未切换CONTAINER) - 目标 PDB 必须是
OPEN状态(查V$PDBS确认) - RMAN 已配置默认设备类型(
CONFIGURE DEFAULT DEVICE TYPE TO DISK或SBT)
如果你真只想保根容器,别碰 PLUGGABLE DATABASE 相关命令,也别去折腾 PDB 开关状态——BACKUP DATABASE ROOT 是唯一干净、可预期、无副作用的选择。
复杂点在于:这个命令不备份密码文件、监听配置、tnsnames.ora 或任何外部脚本。它只管 Oracle 实例内部的物理结构。这些必须单独管理,否则光靠 RMAN 恢复出来的 CDB$ROOT 依然无法对外提供服务。











