必须在CDB$ROOT中执行RMAN命令,PDB不支持直接连接;恢复表空间须用RESTORE TABLESPACE pdb_name:ts_name语法;PDB需CLOSED、CDB需MOUNTED;SYSTEM损坏时须先OFFLINE DROP再恢复。
必须在CDB$ROOT中执行RMAN命令,不能连PDB目标
直接connect target /@pdb_name会失败,不是权限配置问题,而是rman底层不支持——控制文件、备份元数据、归档日志路径全是cdb全局资源,pdb里根本看不到v$backup_set视图。常见报错是rman-06004或ora-01031: insufficient privileges。你看到的sysbackup角色只在cdb$root生效,pdb中无映射。
RESTORE TABLESPACE pdb_name:ts_name 是唯一安全语法
别写RESTORE DATAFILE 42或RESTORE TABLESPACE USERS,前者解析的是CDB全局文件号,后者默认作用于CDB$ROOT,极大概率覆盖根容器表空间。官方从12.2起明确推荐带前缀的写法:RESTORE TABLESPACE pdb1:USERS。它自动完成三件事:识别目标PDB容器、过滤该PDB专属备份集、映射正确的数据文件路径。实操中漏掉pdb1:前缀,是RMAN-06023和误恢复到CDBSYSTEM的主因。
PDB状态必须为CLOSED,CDB必须MOUNTED
恢复前务必确认两点:用SHOW CON_NAME确保当前在CDB$ROOT;执行ALTER PLUGGABLE DATABASE pdb1 CLOSE IMMEDIATE。PDB处于OPEN状态时,RMAN虽不拦RESTORE,但后续RECOVER会卡住或报ORA-01153(活动日志冲突)。CDB则必须处于MOUNT状态——STARTUP MOUNT即可,无需OPEN。如果跳过这步,LIST BACKUP OF TABLESPACE pdb1:USERS会查不到备份。
SYSTEM表空间损坏需走OFFLINE DROP路径
一旦SYSTEM01.DBF损坏,ALTER PLUGGABLE DATABASE pdb1 OPEN必然报ORA-01113或ORA-01157。这时不能硬开,也不能直接RESTORE。正确顺序是:在CDB$ROOT中先ALTER DATABASE DATAFILE '/path/to/pdb/system01.dbf' OFFLINE DROP,再RESTORE TABLESPACE pdb1:SYSTEM,接着RECOVER TABLESPACE pdb1:SYSTEM,最后ALTER DATABASE DATAFILE '/path/to/pdb/system01.dbf' ONLINE。漏掉OFFLINE DROP,RMAN会因文件已存在而拒绝覆盖;在PDB未关闭时对SYSTEM做online恢复,会触发句柄冲突。
热插拔恢复的关键不在“热”,而在“精准”——所有操作都绕不开容器上下文、前缀语法、状态协同这三个硬约束。少一个条件,RMAN就可能把备份片解压到错误位置,甚至把CDBSYSTEM搞挂。











