ORA-65122错误时不能直接使用PDB_RESTORE,因该命令不存在;应使用RMAN的RESTORE和RECOVER PLUGGABLE DATABASE,在CDB MOUNT状态下操作,并确保归档完整、控制文件含PDB历史、且仅指定目标PDB。
ORA-65122 错误时不能直接 PDB_RESTORE
oracle 12c+ 中没有 pdb_restore 这个命令或函数——它根本不存在。你看到的 pdb_restore 很可能是对 restore pluggable database 的误写,或是某篇文档里混淆了 rman 命令和内部过程名。真实可用的是 rman 的 restore pluggable database 和 recover pluggable database,且必须在 mount 状态下对 cdb 执行。
常见错误现象:RMAN-00571(语法错误)、ORA-65122(不支持的 PDB 操作)、或 RMAN 报 “unknown command”。
- 确认当前连接的是 CDB root(不是某个 PDB),且已用
CONNECT TARGET /连入 RMAN - 确保目标 PDB 处于
MOUNT状态(不是 OPEN 或 UNPLUGGED):执行ALTER PLUGGABLE DATABASE pdb1 CLOSE;→ALTER PLUGGABLE DATABASE pdb1 MOUNT; - RMAN 不接受
RESTORE PLUGGABLE DATABASE pdb1 FROM TAG 'xxx';这类带FROM TAG的写法——必须先用LIST BACKUP OF PLUGGABLE DATABASE pdb1;确认备份集存在,再让 RMAN 自动选择
只恢复单个 PDB:必须排除其他 PDB 干扰
默认情况下,RMAN 的 RESTORE PLUGGABLE DATABASE 会尝试恢复所有已备份的 PDB,除非显式限定。想只动 pdb1,就得关掉“自动推导”行为。
- 在 RMAN 中先运行
SHOW ALL;,检查CONFIGURE EXCLUDE FOR TABLESPACE是否误启用了排除规则(虽然它不作用于 PDB 级,但可能干扰逻辑) - 明确指定 PDB 名:用
RESTORE PLUGGABLE DATABASE pdb1;(注意不加引号、大小写需与DBA_PDBS中一致) - 如果备份是多 PDB 合并在一个备份集中,RMAN 仍能按 PDB 元数据分离还原——但前提是控制文件里还保留该 PDB 的 incarnation 信息;若已 DROP PLUGGABLE DATABASE 且未保留归档,就无法单独恢复
- 别依赖
RESTORE DATABASE后手动打开 PDB:那样会拉整个 CDB,违背“单个 PDB”前提
OPEN RESTRICTED + RECOVER 是关键断点
还原(restore)只是把文件拷回原位,真正让数据一致靠的是 recover。PDB 恢复后不能直接 ALTER PLUGGABLE DATABASE OPEN,否则报 ORA-01113(数据文件需要恢复)或 ORA-65139(XML 文件头不匹配)。
- 还原完成后,立即执行
RECOVER PLUGGABLE DATABASE pdb1;—— 它会自动应用归档日志直到 SCN 一致 - 恢复成功后,用
ALTER PLUGGABLE DATABASE pdb1 OPEN RESTRICTED;启动(不是OPEN)。Restricted 模式可防止用户连接,同时允许 DBA 校验数据 - 校验建议跑一次
DBMS_PDB.CHECK_PLUG_COMPATIBILITY(如果之后要迁移或重放),但非恢复必需步骤 - 确认无误再
ALTER PLUGGABLE DATABASE pdb1 OPEN;,此时才真正对外服务
归档缺失或控制文件太旧会导致恢复卡死
最常被忽略的不是语法,而是环境状态:RMAN 能否找到足够归档日志?控制文件是否包含该 PDB 的完整历史?
- 检查归档路径是否在线:
ARCHIVE LOG LIST;输出中Database log mode必须是ARCHIVELOG,且Automatic archival为Enabled - 用
LIST ARCHIVELOG ALL;看 RMAN 是否能枚举出覆盖 PDB 备份时间点的归档;若显示为空,说明归档已被删除或ARCHIVELOG DELETION POLICY清过 - 如果控制文件是备份后重建的,或做过
RESETLOGS,旧 PDB 的INCARNATION可能丢失——此时RESTORE PLUGGABLE DATABASE会报ORA-19554或找不到备份 - 紧急方案:从旧控制文件备份(
BACKUP CURRENT CONTROLFILE)中恢复控制文件,再重试——但这会中断其他 PDB
恢复单个 PDB 看似简单,实际成败取决于归档连续性、控制文件完整性、以及你是否真关掉了其他 PDB 的干扰路径。语法写对只是第一步,后面三步没踩准,照样停在 RECOVER 阶段不动。

















