BACKUP PLUGGABLE DATABASE 命令生效需满足四前提:必须连接 CDB$ROOT、CDB 处于 ARCHIVELOG 模式、PDB 名用单引号包裹、每个 PDB 需独立 Level 0 基准。
BACKUP PLUGGABLE DATABASE 命令不生效?先确认当前连接的是 CDB$ROOT
执行 backup pluggable database 必须在 cdb 级别连接,且用户要有 sysbackup 或 sysdba 权限。如果连的是某个 pdb(比如用 alter session set container = pdb1 切过去),命令会直接报错:ora-65040: operation not allowed from within a pluggable database。
实操建议:
- 用
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM DUAL;确认当前容器名,必须是CDB$ROOT - 连接时显式指定:
sqlplus / as sysbackup(推荐)或sqlplus / as sysdba - 不要在 RMAN 中先
CONNECT TARGET到 PDB —— RMAN 会自动继承 SQL*Plus 的容器上下文
RMAN 备份 PDB 时,ARCHIVELOG 模式不是可选项,而是硬性前提
哪怕只备份数据文件,BACKUP PLUGGABLE DATABASE 也要求整个 CDB 处于归档模式。否则 RMAN 报错:RMAN-03002: failure of backup command at ... ORA-01145: offline immediate disallowed unless media recovery enabled —— 这其实是归档未开启的典型伪装错误。
实操建议:
- 检查:
ARCHIVE LOG LIST(在 SQL*Plus 中运行),确认输出含Database log mode: Archive Mode - 若未开启,需在 MOUNT 状态下执行
ALTER DATABASE ARCHIVELOG;,再ALTER DATABASE OPEN; - 注意:切换归档模式会触发一次日志切换,确保
DB_RECOVERY_FILE_DEST有足够空间
备份单个 PDB 和多个 PDB 的语法差异很小,但漏掉引号会静默失败
RMAN 对 PDB 名称大小写敏感,且当名称含数字、下划线或小写字母时,必须用单引号包裹。例如 BACKUP PLUGGABLE DATABASE pdb1; 成功,但 BACKUP PLUGGABLE DATABASE orcl_pdb; 会报 ORA-00922: missing or invalid option —— 因为下划线被解析成语法分隔符。
实操建议:
- 统一用单引号:
BACKUP PLUGGABLE DATABASE 'PDB1';、BACKUP PLUGGABLE DATABASE 'pdb2', 'pdb3'; - 查 PDB 名称真实拼写:
SELECT NAME, OPEN_MODE FROM V$PDBS;,注意大小写 - 避免在脚本中拼接变量名,RMAN 不支持变量替换;如需动态执行,用 shell + sqlplus 调用,而非 RMAN 脚本内嵌
增量备份 PDB 不能跨 PDB 共享增量日志,每个 PDB 需独立基准
对 PDB 做 INCREMENTAL LEVEL 1 时,RMAN 默认找该 PDB 自身的最近 Level 0 备份作为基准。它不会、也不能复用其他 PDB 的 Level 0 —— 即便它们物理上共享同一组数据文件。误以为“CDB 级别做了全备,PDB 就能直接增备”,会导致 RMAN-06059: expected archived log not found 或备份变全量。
实操建议:
- 给每个 PDB 单独做一次
BACKUP INCREMENTAL LEVEL 0 PLUGGABLE DATABASE 'pdb1'; - 增量命令里必须显式指定 PDB 名:
BACKUP INCREMENTAL LEVEL 1 PLUGGABLE DATABASE 'pdb1'; - 不要依赖
CONFIGURE EXCLUDE FOR TABLESPACE来跳过某些 PDB —— 它只对 CDB 全备生效,对PLUGGABLE DATABASE子句无效










