Oracle 12c PDB级容灾需启用ENABLED_PDBS_ON_STANDBY并由Data Guard Broker统一管控,否则远程克隆的PDB在备库无法OPEN;因克隆不传递归档日志、未注册服务名、DBID不一致且MRP不应用日志,导致RECOVER失败。
oracle 12c 的 pdb 级别容灾不是“开箱即用”的功能,必须启用 enabled_pdbs_on_standby 并由 data guard broker 统一管控,否则远程克隆的 pdb 在备库上始终无法 open。
为什么 CREATE PLUGGABLE DATABASE FROM @dblink 后 PDB 无法 OPEN
远程克隆只复制数据文件和 XML 描述,不传递归档日志流、不注册服务名、不同步 PDB$SEED 状态。克隆出的 PDB 在备库上处于 MOUNTED 状态,但 V$PDBS.RECOVERY_STATUS 显示为 DISABLED,MRP 进程根本不会为其应用日志。
-
DBID与主库不一致,导致RECOVER PLUGGABLE DATABASE直接失败 - 备库未显式启用该 PDB,
V$ARCHIVED_LOG中查不到对应CON_ID的日志记录 - 若未指定
FILE_NAME_CONVERT,数据文件路径冲突,ALTER DATABASE OPEN报ORA-01157
ENABLED_PDBS_ON_STANDBY 必须设为 * 或显式列表
该参数控制哪些 PDB 的重做流会被备库接收并应用。Broker 是唯一能协调 RAC 主库多节点日志流向单实例备库的机制,它把所有 PDB 的归档请求统一绑定到 LOG_ARCHIVE_DEST_2。
- 值必须是
'*'(全同步)或显式列出 PDB 名(如'PDB1,PDB2'),不能为空字符串或NULL - 修改需在主备库均执行:
ALTER SYSTEM SET ENABLED_PDBS_ON_STANDBY='*' SCOPE=BOTH; - 修改后必须重启备库 MRP 进程:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;→ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
监听与 TNS 必须静态注册 _DGMGRL 服务名
RAC 主库每个节点监听器必须静态注册 GLOBAL_DBNAME = <db_unique_name>_DGMGRL.<domain>,否则 Broker 连接时触发 ORA-12154——这不是 tnsnames.ora 解析问题,而是 Broker 启动数据库时依赖这个特定服务名。
- TNS 别名中 SERVICE_NAME 必须匹配该
GLOBAL_DBNAME,而非普通 PDB 服务名 - 验证方式:在备库执行
SELECT name, open_mode, recovery_status FROM v$pdbs;和SELECT pdb_name, status FROM dba_pdb_history; - 关键状态检查点还包括
V$ARCHIVE_DEST_STATUS中对应 PDB 的STATUS和ERROR字段
真正容易被忽略的是:哪怕只新增一个 PDB,只要没在 ENABLED_PDBS_ON_STANDBY 中显式声明,备库就完全“看不见”它——既不拉日志,也不报错,只静默跳过。这种静默失效比报错更危险。


















