oracle 19c data guard 默认同步新增pdb,但需备库启用enabled_pdbs_on_standby(默认*)、standby_file_management=auto且主备数据库选项/补丁/字符集一致;否则会报ora-65016、unnamed00022或pdb_plug_in_violations错误。

Oracle 19c Data Guard 默认会同步新增 PDB,但前提是备库已正确配置 enabled_pdbs_on_standby 参数且主备归档链路正常;否则新建 PDB 在备库可能处于 READ ONLY 但无数据、或根本未创建、甚至报 ORA-65016 / UNNAMED00022 等错误。
新增 PDB 后备库没出现?先查 enabled_pdbs_on_standby
该参数只在备库生效,控制「新建」PDB 是否自动创建并同步。它不影响已有 PDB 的同步状态。
- 默认值为
*(通配符),表示允许所有新建 PDB 同步 —— 但仅当备库处于 MOUNT 或 OPEN READ ONLY 状态且日志应用正常时才起作用 - 若设为具体列表(如
'PDB1,PDB2'),则只有匹配名称的新建 PDB 才会被备库自动创建;不匹配的会被跳过,ALTER PLUGGABLE DATABASE ... OPEN在备库不会执行 - 修改后无需重启实例,但需确认备库已开启实时应用:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT; - 检查方式:
SHOW PARAMETER enabled_pdbs_on_standby(在备库执行)
主库建 PDB 报 ORA-65016?FILE_NAME_CONVERT 是硬性门槛
主库建 PDB 失败不是 DG 问题,而是本地配置缺失,但会间接导致备库无法同步 —— 因为归档里根本没有完整的 PDB 创建日志。
-
ORA-65016: FILE_NAME_CONVERT must be specified表示 Oracle 不知道新 PDB 数据文件该放哪;必须显式指定路径映射 - 两种合法解法(任选其一):
- 启用 OMF:
ALTER SYSTEM SET db_create_file_dest='/u01/app/oracle/oradata' SCOPE=BOTH; - 或建库时带
FILE_NAME_CONVERT子句:CREATE PLUGGABLE DATABASE pdb_new FROM pdb_seed FILE_NAME_CONVERT=('/pdbseed/','/pdb_new/');
- 启用 OMF:
- 若用
PDB_FILE_NAME_CONVERT(静态参数),需在 spfile 中设置并重启;但 19c 更推荐用语句级FILE_NAME_CONVERT,更灵活 - 漏掉这步,主库建 PDB 失败,自然没有归档日志传到备库,备库连“听说这事”都不会
备库看到 PDB 名称但 OPEN MODE 是 MOUNTED 或 READ ONLY 却查不到表?检查 PDB_PLUG_IN_VIOLATIONS
这是最常被忽略的环节:PDB 在备库能创建,不代表能正常打开和查询。常见于主备数据库选项不一致(如 JAVAVM、OLS)、字符集差异或补丁级别不同。
- 查违规记录:
SELECT * FROM pdb_plug_in_violations WHERE status = 'WARNING' OR status = 'ERROR'; - 典型输出如:
Database option JAVAVM mismatch: PDB installed version NULL—— 表示主库 PDB 安装了 JVM,但备库 CDB 没启用 - 修复方式不是“在备库装 JVM”,而是统一主备的
catqm.sql/catjava.sql运行状态,或用DBMS_PDB.DESCRIBE+CREATE PLUGGABLE DATABASE ... USING手动重插 - 即使
OPEN MODE显示READ ONLY,只要存在 violation,实际数据字典未加载,SELECT * FROM a就会报ORA-00942: table or view does not exist
同步延迟大或卡住?别只盯 PDB,先确认 ARCHIVE_LAG_TARGET 和 STANDBY_FILE_MANAGEMENT
PDB 同步本质还是归档日志应用,底层机制没变。但 PDB 新增会触发大量系统对象 DDL(如 CREATE TABLESPACE、CREATE USER),对参数敏感度更高。
-
STANDBY_FILE_MANAGEMENT=AUTO必须启用(默认是AUTO),否则备库不会自动创建 PDB 对应的数据文件,日志应用会挂起在File #22 added to control file as 'UNNAMED00022' -
ARCHIVE_LAG_TARGET建议设为 0(禁用归档强制切换),避免因人为切归档导致 PDB 创建日志分散在多个归档中,拉长应用时间 - 验证是否真同步:主库建完 PDB 后,立即在主库该 PDB 内插入测试行,再查备库对应 PDB —— 不要只看
V$PDBS,要查真实业务表 - 注意:ADG 备库上 PDB 只能
OPEN READ ONLY,不能OPEN READ WRITE;如果误执行ALTER PLUGGABLE DATABASE ... OPEN,会报ORA-65115
真正容易卡住的地方不在语法,而在主备 CDB 的底层一致性:数据库选项、补丁集、字符集、甚至 COMPATIBLE 参数。PDB 同步不是“开关一开就通”,它是把整个 PDB 的元数据+数据块+日志流完整复刻过去,任何一环不匹配,都会在 PDB_PLUG_IN_VIOLATIONS 里留痕,而这个视图常常被跳过不查。











