restore database在pdb中必然失败,因pdb无独立控制文件、spfile及完整数据文件集,所有物理结构归属cdb;必须在cdb$root中执行recover pluggable database(未drop时)或分阶段重建cdb骨架+提取pdb(已drop时),表空间级恢复则须用pdb_name:tablespace_name显式限定。

RESTORE DATABASE 在 PDB 会话中必然失败,不是权限问题,也不是命令写错——Oracle 内核直接禁止。PDB 没有独立控制文件、SPFILE 或完整数据文件集,所有物理结构归属 CDB,RMAN 在 PDB 上下文里根本无法解析出该 PDB 的全部数据文件路径(比如 SYSTEM 文件可能指向 CDB 公共目录),也无法触发归档日志应用。
必须在 CDB$ROOT 中操作,且恢复动作需严格区分场景:是“整个 PDB”逻辑重建,还是“仅损坏表空间”快速修复,抑或是“已 DROP”的极端情况。选错路径会导致 ORA-01194、RMAN-06813 或静默覆盖根容器对象。
必须在 CDB$ROOT 中执行 RECOVER PLUGGABLE DATABASE
这是恢复**未被删除、仍可见于 SHOW PDBS 的 PDB** 的唯一合法方式:
- 先确认当前容器:
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM DUAL;必须返回CDB$ROOT - 关闭目标 PDB:
ALTER PLUGGABLE DATABASE pdb1 CLOSE IMMEDIATE; - 确保 CDB 处于
ARCHIVELOG模式,且归档日志覆盖目标时间点 - 执行:
RECOVER PLUGGABLE DATABASE pdb1 UNTIL TIME 'SYSDATE-1/24';
这条命令自动完成三件事:还原该 PDB 关联的数据文件(仅限其 SYSTEM/SYSAUX+用户表空间)、应用归档日志到指定时间点、跳过其他 PDB 的变更记录。它不要求单独做过 BACKUP PLUGGABLE DATABASE,只要 CDB 备份里含该 PDB 数据即可。
表空间级恢复必须用 pdb_name:tablespace_name 显式限定
如果只是某个 PDB 的用户表空间(如 USERS)损坏,且你只想恢复它,不能写 RESTORE TABLESPACE USERS——默认作用于 CDB$ROOT,极大概率覆盖根容器的同名表空间:
- 必须带容器前缀:
RESTORE TABLESPACE pdb1:USERS;,RMAN 才能识别归属、过滤专属备份、映射正确路径 - CDB 必须处于
MOUNT状态(STARTUP MOUNT),PDB 不需要 OPEN,但建议先CLOSE -
RESTORE只拷文件,必须紧跟着执行RECOVER TABLESPACE pdb1:USERS;才能应用归档日志;顺序不可颠倒 - 验证备份存在:
LIST BACKUP OF TABLESPACE pdb1:USERS;,若报RMAN-06023,常见原因是备份时没显式包含该表空间,或 PDB 当时为READ ONLY状态(RMAN 默认不备份只读表空间)
已 DROP 的 PDB 无法直接恢复,必须重建 CDB 骨架
执行过 DROP PLUGGABLE DATABASE pdb1 INCLUDING DATAFILES 后,RECOVER PLUGGABLE DATABASE 会报 RMAN-06813: could not translate pluggable database pdb。因为控制文件中该 PDB 的 incarnation 信息已被清除,元数据已丢失:
- 第一阶段:重建 CDB 骨架——用
RESTORE CONTROLFILE+RESTORE DATABASE+RECOVER DATABASE UNTIL TIME '...'把 CDB$ROOT 恢复到 DROP 前的时间点。此时数据库处于MOUNT状态,SHOW PDBS仍看不到该 PDB,但它的定义已回到数据字典里 - 第二阶段:提取 PDB——若 Oracle 版本 ≥ 19.11 且启用了
ENABLE_PLUGGABLE_DATABASE,可尝试FLASHBACK PLUGGABLE DATABASE pdb1 TO BEFORE DROP;否则需从备份中手动COPY数据文件,并用CREATE PLUGGABLE DATABASE ... USING导入 XML 描述符 -
UNTIL TIME必须早于DROP命令执行时间,且对应时间点的完整备份集 + 归档日志必须可用
最常被忽略的点是:PDB 的恢复永远不是孤立动作,它强依赖 CDB 的一致性状态和归档日志链的完整性。哪怕你只动一个表空间,RMAN 也必须能访问 CDB 级别的控制文件、归档日志和备份元数据。跳过 CDB 骨架重建、在错误容器中执行命令、或忽略表空间名的容器限定符,都会让恢复中途失败或破坏其他 PDB。











