主库新建PDB后备库不会自动同步,需手动执行RMAN备份、传输、恢复、启用恢复及OPEN READ ONLY操作;关键依赖DB_FILE_NAME_CONVERT路径映射正确且STANDBY_FILE_MANAGEMENT=AUTO。
主库新建PDB后,备库不会自动同步
oracle 12c dg(包括adg)中,create pluggable database操作本身不触发归档日志的“完整重放”,备库不会自动创建同名pdb、复制数据文件或启用恢复。这是设计使然——dg同步的是物理块变更(redo),而pdb创建涉及元数据注册、文件系统操作、cdb级字典更新等非redo可覆盖动作。
常见错误现象包括:
- 备库
V$PDBS查不到新PDB,或状态为NEW/UNUSABLE - 主库PDB正常读写,但备库
ALTER PLUGGABLE DATABASE ... OPEN报ORA-01219或ORA-65139 - RMAN恢复后
ALTER PLUGGABLE DATABASE ENABLE RECOVERY失败,提示控制文件中无该PDB记录
根本原因在于:主库创建PDB时生成的redo仅包含CDB$ROOT中CDB_PDBS视图的插入记录,但备库缺少对应的数据文件、临时文件、表空间定义,且控制文件未感知该PDB的物理结构。
必须手动在备库执行RMAN恢复+启用恢复
主库PDB创建完成后,需在备库走一套标准恢复流程,不能跳步:
- 在主库完成PDB创建并OPEN后,立即用RMAN备份该PDB:
BACKUP PLUGGABLE DATABASE pdb<em>name FORMAT '/path/to/backup/pdb</em>%U.bkp'; - 将备份集、主库当前控制文件(
ALTER DATABASE BACKUP CONTROLFILE TO '/path/ctrl.bkp';)一并拷贝至备库可访问路径 - 在备库启动到MOUNT状态(
STARTUP MOUNT),然后执行:RMAN> CATALOG START WITH '/path/to/backup/'; RMAN> RESTORE PLUGGABLE DATABASE pdb_name; RMAN> SWITCH DATAFILE ALL;
- 切换回SQL*Plus,确认PDB已注册:
SELECT CON_ID, NAME, OPEN_MODE FROM V$PDBS WHERE NAME = 'PDB_NAME';—— 此时应为MOUNTED - 启用该PDB的介质恢复:
ALTER SESSION SET CONTAINER = pdb_name;→ALTER PLUGGABLE DATABASE ENABLE RECOVERY; - 最后打开PDB:
ALTER PLUGGABLE DATABASE pdb_name OPEN READ ONLY;(ADG下只能只读)
注意:若主库PDB使用了STANDBYS=NONE选项(如某些迁移场景),则该PDB明确被排除在DG同步范围外,上述流程无效,需改用Data Pump或Refreshable PDB替代。
关键参数和路径转换必须提前对齐
备库能否成功应用PDB恢复,高度依赖主备间路径一致性:
-
DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT必须在备库初始化时就配置好,且覆盖PDB数据文件所在路径。例如主库PDB数据文件在/u01/oradata/cdb/pdb1/,备库对应路径是/u01/oradata/stdby/pdb1/,则参数值应为'/u01/oradata/cdb/','/u01/oradata/stdby/' - 若PDB含自定义表空间(如
USERS),其数据文件路径也必须纳入DB_FILE_NAME_CONVERT范围,否则RESTORE会报ORA-19573: cannot obtain exclusive enqueue for datafile - 备库
STANDBY_FILE_MANAGEMENT必须为AUTO,否则即使路径转换正确,新增数据文件也不会自动创建
漏掉任一路径映射,RMAN恢复时就会卡在“找不到目标文件”或“无法重命名”,而不是报错退出——容易误判为成功。
ADG下PDB同步后仍需手动OPEN READ ONLY
即使RMAN恢复和ENABLE RECOVERY全部成功,PDB在备库默认仍是MOUNTED状态,不会自动OPEN。这是因为ADG要求所有PDB以只读方式提供服务,且OPEN动作本身不通过redo传播。
必须显式执行:
ALTER PLUGGABLE DATABASE pdb_name OPEN READ ONLY;- 若有多个PDB,建议逐个检查:
SELECT NAME, OPEN_MODE FROM V$PDBS WHERE OPEN_MODE != 'READ ONLY';
容易被忽略的一点是:如果主库PDB处于READ WRITE模式,而备库PDB因权限、磁盘满或临时文件缺失导致OPEN失败,DG日志应用进程(MRP)会持续挂起,V$MANAGED_STANDBY中PROCESS为MRP0且STATUS为WAIT_FOR_LOG,但实际是卡在PDB层,不是归档传输问题。
这种卡点不报错、不告警,只表现为同步延迟持续增长,排查时容易绕远路。


















