物理备库pdb不能直接open,必须先停mrp;因dg只同步物理块不传播open状态,mrp运行时执行alter pluggable database open会报ora-65115,须先执行cancel停止mrp,再open read only,之后必须close immediate才能恢复同步。
物理备库pdb不能直接open,必须先停mrp
oracle 12c物理备库的pdb默认始终是mounted状态,这是设计使然——data guard只同步物理块,不传播open状态。你执行alter pluggable database pdb1 open报错,大概率是因为mrp(managed recovery process)仍在运行。此时数据库处于“恢复中”状态,任何open操作都会被拒绝,常见错误是ora-65115或直接提示“database is in recovery mode”。
实操上必须分两步:先停MRP,再OPEN。顺序不能颠倒,也不能跳过停MRP这步直接强行OPEN。
-
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;—— 这是唯一合法停止日志应用的方式,不要用SHUTDOWN或kill进程替代 - 确认MRP已退出:
SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY WHERE PROCESS = 'MRP0';返回空行才算成功 - 再执行
ALTER PLUGGABLE DATABASE pdb1 OPEN READ ONLY;—— 注意必须加READ ONLY,物理备库不允许READ WRITE
备库PDB只能READ ONLY,且OPEN后无法自动切回同步
OPEN之后的PDB处于只读服务状态,但这也意味着它脱离了DG保护链。一旦你忘了关闭就重启MRP,START APPLY会立即失败并报ORA-65115,因为Oracle不允许在PDB已OPEN时继续应用归档。
这个限制不是配置问题,而是内核级校验:MRP启动前会扫描所有PDB状态,发现任一PDB为READ ONLY就中止。
- 切回同步前必须显式关闭:
ALTER PLUGGABLE DATABASE pdb1 CLOSE IMMEDIATE; - 关闭后验证:
SELECT CON_ID, NAME, OPEN_MODE FROM V$PDBS;确保返回MOUNTED - 再启MRP:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
多租户环境下CDB和PDB参数需独立校验
如果你在CDB$ROOT里改了STANDBY_FILE_MANAGEMENT或FAL_SERVER,这些参数不会自动继承到PDB。而PDB自身的OPEN_MODE依赖CDB层是否允许其参与恢复流程——若CDB未启用STANDBY_FILE_MANAGEMENT=AUTO,即使PDB已OPEN,后续文件自动创建也可能失败。
关键检查点不在PDB视图里,而在CDB层级:
- 查CDB参数:
SHOW PARAMETER standby_file_management和SHOW PARAMETER fal_server - 确认
LOG_ARCHIVE_DEST_2指向主库TNS名,且该TNS在备库$ORACLE_HOME/network/admin/tnsnames.ora中真实可解析 - PDB内部无需单独设归档参数,但
DBA_PDBS中STATUS列若为UNUSABLE,说明CDB层日志应用已中断,需先修复MRP再处理PDB
OPEN PDB后遇到ORA-01157或ORA-16004怎么办
这类错误不是PDB本身的问题,而是底层数据文件或控制文件状态异常导致的连锁反应。例如MRP刚取消,控制文件还没完成checkpoint刷新,此时OPEN会触发ORA-16004(backup database requires recovery);又或者某个PDB的数据文件路径在备库上不存在,OPEN READ ONLY会立刻报ORA-01157。
别急着删文件或重建,先定位真实源头:
- 查缺失文件:
SELECT NAME, STATUS FROM V$DATAFILE WHERE CON_ID = (SELECT CON_ID FROM V$PDBS WHERE NAME = 'PDB1'); - 看控制文件一致性:
SELECT CHECKPOINT_CHANGE#, CONTROLFILE_CHANGE# FROM V$DATABASE;若两者不等,说明CDB尚未完成最后一次SCN同步,不能OPEN任何PDB - 确认文件路径真实存在:
!ls -l /u01/oradata/orcl/pdb1/—— 路径拼写、权限、挂载点都得人工验证,不能只信V$DATAFILE里的NAME字段
最易被忽略的是:PDB OPEN前,CDB必须已完成一次完整的checkpoint,且V$DATABASE.CONTROLFILE_CHANGE#与CHECKPOINT_CHANGE#严格相等。这点在RAC环境或ASM磁盘组延迟场景下尤其容易卡住。











