一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Oracle 12c Data Guard如何处理CDB与PDB同步

时间:2026-08-08 09:39:48 编辑:袖梨 来源:一聚教程网

Oracle 12c Data Guard在CDB环境中通过备库端ENABLED_PDBS_ON_STANDBY参数控制PDB同步范围,默认值“*”同步所有PDB,显式指定如'pdb1,pdb3'则仅同步所列PDB,该参数仅在备库生效、需重启实例生效,且PDB在备库默认为MOUNTED状态,须手动OPEN READ ONLY方可验证数据同步。

Oracle 12c Data Guard 在 CDB 环境中默认同步整个容器(CDB$ROOT + 所有 PDB),但不能按 PDB 粒度单独开启/关闭同步;真正能控制“哪些 PDB 出现在备库”的,是备库端的 ENABLED_PDBS_ON_STANDBY 参数,且它只影响 PDB 的存在性,不干预日志传输或应用本身。

ENABLED_PDBS_ON_STANDBY 参数必须在备库设置

这个参数决定备库启动后哪些 PDB 会被自动创建并参与日志应用。它只在备库生效,主库设了无效。

  1. ENABLED_PDBS_ON_STANDBY = '*'(默认):主库所有 PDB 都会在备库创建(包括 PDB$SEED 和用户 PDB)
  2. ENABLED_PDBS_ON_STANDBY = 'pdb1,pdb3':仅同步指定的 PDB,其余 PDB 在备库不会被创建,也不会接收其归档日志(即使主库有)
  3. 该参数值不支持通配符或正则,必须显式列出 PDB 名(大小写敏感)
  4. 修改后需重启备库(或至少重启实例+mount)才能生效

主库创建新 PDB 时,同步行为取决于 Oracle 版本

12.1 和 12.2+ 行为不同,直接影响你是否需要人工干预:

  1. Oracle 12.1:创建 PDB 时只能指定 CREATE PLUGGABLE DATABASE ... CREATE_FILE_DEST='...' ENABLE PLUGGABLE DATABASE;,没有同步粒度控制;新 PDB 默认会同步到所有物理备库(除非备库已设 ENABLED_PDBS_ON_STANDBY 排除)
  2. Oracle 12.2+:支持 CREATE PLUGGABLE DATABASE ... ENABLE PLUGGABLE DATABASE FOR DATA GUARD;DISABLE PLUGGABLE DATABASE FOR DATA GUARD;,可显式声明该 PDB 是否参与 DG 同步
  3. 注意:DISABLE 仅阻止该 PDB 在备库被创建,不影响 CDB$ROOT 和其他 PDB 的日志传输与应用

备库上 PDB 不 open ≠ 没同步,但 open 是验证前提

即使 ENABLED_PDBS_ON_STANDBY 包含某个 PDB,它在备库默认是 MOUNTED 状态,不是 READ ONLYREAD WRITE。不手动 ALTER PLUGGABLE DATABASE pdb1 OPEN READ ONLY;,你就看不到数据变化,也无法做业务级验证。

  1. 物理备库上 ALTER PLUGGABLE DATABASE ... OPEN 是允许的,但只能开成 READ ONLY(ADG 模式下)或 READ WRITE(快照备库)
  2. 切勿在物理备库执行 ALTER PLUGGABLE DATABASE ... RECOVER —— 这个命令不存在,REDO 应用始终是 CDB 级别的
  3. 验证同步是否生效,必须在对应 PDB 内执行 DML(如插入一行)+ 切归档 + 查备库该 PDB 中的数据

常见错误:ORA-16494 和 TNS 配置错位

主库 v$archive_destORA-16494,大概率是 LOG_ARCHIVE_DEST_2 指向的服务名(如 orcldg)实际连到了某个 PDB 而非 CDB$ROOT。

  1. 检查备库 tnsnames.ora 中服务名对应的 SERVICE_NAME:必须是 CDB 全局服务名(如 orcldg),不能是 PDB 服务名(如 pdb1.orcldg
  2. 在备库执行 SELECT name, con_id FROM cdb_services WHERE con_id = 1;,确认该服务名绑定的是 CON_ID = 1(即 CDB$ROOT)
  3. FAL_CLIENTFAL_SERVER 也必须指向 CDB 级服务名,否则归档缺失检测会失败

最关键的细节常被忽略:PDB 同步不是靠“主库开关”,而是靠“备库白名单”+“版本级创建策略”+“TNS 绑定到 CDB$ROOT”。漏掉任一环,都会导致你以为没同步的 PDB 实际在传日志,或你以为同步了的 PDB 根本没出现在备库目录里。

热门栏目