单独备份pdb最稳妥方式是在该pdb内执行backup database,仅备份其自身数据文件、控制文件快照和spfile副本(若启用自动备份),不涉及cdb$root或其他pdb;在cdb根下用backup pluggable database需同时满足三前提:连接在根容器、目标pdb为open状态、已配置默认设备类型,缺一则可能静默失败。
想单独备份一个 pdb,必须在该 pdb 内部执行 backup database,或者在 cdb 根下用 backup pluggable database pdb_name ——但后者有三个硬性前提,缺一不可,否则静默跳过或报错。
在 PDB 内执行 BACKUP DATABASE 是最稳妥的方式
这是唯一不依赖其它 PDB 状态、也不受 RMAN 通道配置“侥幸影响”的路径。你连进某个 PDB 后,BACKUP DATABASE 就只备份它自己:数据文件、当前控制文件快照、SPFILE 副本(如果启用了 CONFIGURE CONTROLFILE AUTOBACKUP ON),不会碰 CDB$ROOT 或其它 PDB。
- 先用 SQL*Plus 切容器:
ALTER SESSION SET CONTAINER = pdb1; - 再用
CONNECT / AS SYSBACKUP(推荐)或CONNECT / AS SYSDBA连入该上下文 - 此时运行
BACKUP DATABASE FORMAT '/backup/pdb1_%U.bkp';,就只产生 pdb1 的备份集 - 注意:
BACKUP DATABASE PLUS ARCHIVELOG在 PDB 内执行时,不会备份归档日志 —— 归档日志始终是全 CDB 级别的,得在根下单独处理
BACKUP PLUGGABLE DATABASE pdb_name 在根下执行的三个必要条件
这条命令看起来方便,但 RMAN 不会自动帮你检查前提。只要漏掉一个,就可能:不报错、不备份、只打印一条 RMAN-06207: WARNING: no channels allocated for maintenance,然后结束。
- 必须在 CDB 根容器中连接 RMAN(即
CONNECT TARGET /后没执行过ALTER SESSION SET CONTAINER) - 目标 PDB 必须是
OPEN状态(查SELECT NAME, OPEN_MODE FROM V$PDBS WHERE NAME = 'PDB1';,不能是MOUNTED或READ ONLY) - RMAN 必须已配置默认设备类型:
CONFIGURE DEFAULT DEVICE TYPE TO DISK;或TO SBT;;否则即使有磁盘空间,也会因找不到通道而失败
常见错误现象与对应排查点
你以为命令跑完了,结果 LIST BACKUPSET 里找不到目标 PDB 的文件,或者恢复时提示“no backup of datafile”,大概率踩了下面这些坑:
-
ORA-65040: operation not allowed from within a pluggable database:你在 PDB 里直接敲了BACKUP PLUGGABLE DATABASE—— 这个命令只能在根下运行 - 备份集里只有 CDB$ROOT 和 PDB$SEED:说明你执行
BACKUP DATABASE时,目标 PDB 是MOUNTED状态,RMAN 默认跳过 - 备份日志里出现
RMAN-06207+ “no channels allocated”:根本没配通道,不是语法问题;补上ALLOCATE CHANNEL或提前CONFIGURE DEVICE TYPE - 备份成功但恢复时报
ORA-01219(database not open):因为你在 PDB 内备份后,忘了在恢复前先ALTER PLUGGABLE DATABASE pdb1 OPEN RESTRICTED,RMAN 要求 PDB 至少处于 restricted open 才能 restore/recover
备份内容边界必须心里有数
BACKUP PLUGGABLE DATABASE 或 PDB 内的 BACKUP DATABASE 都只管该 PDB 的数据文件、临时文件、控制文件快照和 SPFILE 副本。它们不包含:
- 密码文件(
orapw$ORACLE_SID),得手动拷贝 - 监听配置(
listener.ora)、网络配置(tnsnames.ora、sqlnet.ora) - PDB 创建脚本、用户权限导出、应用级元数据(如 APEX 工作区)
- 归档日志 —— 即使加了
PLUS ARCHIVELOG,也只在 CDB 根下生效;PDB 内执行该子句会被忽略
这些外部依赖项一旦缺失,光靠 RMAN 备份恢复出来的 PDB 无法对外提供服务。别等灾备演练时才发现连监听都起不来。











