备库PDB默认MOUNTED且无法OPEN,因DG仅同步物理块而非OPEN状态;正确操作须先CANCEL日志应用,再OPEN READ ONLY,最后CLOSE IMMEDIATE并恢复应用,否则报ORA-65115。
主库pdb为read write但备库始终mounted甚至closed,不是配置遗漏,而是oracle明确不自动同步pdb状态——必须手动干预,且仅限read only。
为什么ALTER PLUGGABLE DATABASE OPEN在备库直接报错
备库PDB默认处于MOUNTED状态,这是12c+的强制设计:Data Guard只同步物理块和归档日志,不传播OPEN/READ WRITE这类逻辑状态。若你在备库直接执行ALTER PLUGGABLE DATABASE pdb1 OPEN,会收到ORA-65115: cannot open pluggable database in standby database。这是因为备库尚未暂停日志应用,而OPEN操作与RECOVER进程冲突。
常见误操作包括:
- 在
CDB$ROOT下执行ALTER PLUGGABLE DATABASE pdb1 OPEN(语法合法但实际无效) - 未确认
V$DATABASE.PROTECTION_MODE是否允许READ ONLY打开(如MAXIMUM PROTECTION模式下可能拒绝) - 试图用
OPEN READ WRITE——备库PDB永远不允许写入,强行执行会报ORA-65094
正确开启备库PDB只读服务的三步顺序
必须严格按顺序执行,跳步或颠倒会导致ORA-65115或ORA-16136:
- 先停日志应用:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL - 再开PDB:
ALTER PLUGGABLE DATABASE pdb1 OPEN READ ONLY - 最后恢复同步:
ALTER PLUGGABLE DATABASE pdb1 CLOSE IMMEDIATE→ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT
注意:CLOSE IMMEDIATE是必须步骤。如果跳过,START APPLY会卡住并报错ORA-65115,因为Oracle检测到PDB仍处于OPEN状态,无法安全接管日志流。
db_file_name_convert缺失导致PDB根本不同步
即使你正确执行了OPEN操作,如果备库DB_FILE_NAME_CONVERT没设,新PDB的数据文件路径在备库不存在,MRP进程会直接中断,报错ORA-16766: Redo Apply is stopped或Automatic Copy of Standby datafiles for create pdb failed with error - 65169。
验证和修复方法:
- 查错误日志里是否有
ORA-19505或ORA-27037,通常指向路径找不到 - 在备库
CDB$ROOT下检查:SELECT NAME FROM V$DATAFILE WHERE NAME LIKE '%PDB%',看路径是否仍是主库ASM格式(如+DATA/RACDB/.../system.285.914342455) - 补设参数(需重启生效):
ALTER SYSTEM SET DB_FILE_NAME_CONVERT='+DATA/RACDB/','/oradata/STBY/' SCOPE=SPFILE
该参数必须成对设置:主库路径在前,备库路径在后;且主备两端都建议配置,避免角色切换后路径失效。
PDB同步失败后不能只靠“重开”解决
当PDB因路径或权限问题导致同步中断,仅执行OPEN READ ONLY无法恢复数据一致性。此时V$PDBS中PDB可能显示MOUNTED,但DBA_PDBS里查不到记录,说明元数据未同步完成。
真实可行路径只有两条:
- 用RMAN从主库备份该PDB:
BACKUP PLUGGABLE DATABASE pdb1 FORMAT '/tmp/pdb1.bkp',再在备库还原恢复 - 或重建整个备库(适用于PDB数量少、业务可接受停机)
切记:不要尝试在备库手动创建同名PDB或拷贝数据文件——Oracle内部GUID和DBID校验会失败,后续UNPLUG/PLUG将不可逆。


















