oracle data guard 不支持禁用单个pdb的容灾同步,因日志传输、归档应用等核心机制均在cdb层级运行,pdb无法独立控制dg状态或参数,所有pdb随cdb统一同步。

Oracle Data Guard 不支持“禁用某个 PDB 的容灾同步”——这不是配置问题,而是架构限制。你无法对单个 PDB 开关 DG 同步。
为什么 ALTER PLUGGABLE DATABASE 不能用于 DG 控制
所有 Data Guard 核心机制(日志传输、归档应用、保护模式)都运行在 CDB 层级。PDB 内部查不到 V$DATABASE 的 DG 状态,也改不了 LOG_ARCHIVE_DEST_n 或 FORCE LOGGING 这类参数。你在 PDB 里执行任何类似 ALTER PLUGGABLE DATABASE SET STANDBY DATABASE 的命令,会立刻报 ORA-65040: operation not allowed from within a pluggable database。
LOG_ARCHIVE_DEST_2 指向的是备库 CDB,不是某个 PDB
主库的 LOG_ARCHIVE_DEST_2 必须指向备库的 CDB 服务名(如 orcldg),而不是某个 PDB 的服务名(如 pdb1_stby)。填错会导致:
-
V$ARCHIVE_DEST_STATUS.STATUS显示ERROR或INACTIVE - 主库归档日志生成但传不到备库
- 备库上所有 PDB 始终卡在
MOUNTED状态
验证方式:在主库 CDB$ROOT 执行 SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;,非 VALID 就得立刻排查网络、监听、tnsnames.ora。
所谓“只同步指定 PDB”本质是 CDB 全量同步 + 备库手动控制 PDB 状态
即使你希望“只让 PDB1 同步”,实际仍是整个 CDB 的 redo 日志被传输并应用到备库 CDB。所谓“隔离”,只能在备库侧通过以下方式实现:
- 备库 CDB 启动后,默认所有 PDB 都是
MOUNTED—— 这是 Oracle 的明确设计,不是 bug - 要让
PDB1提供只读查询:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;,再ALTER PLUGGABLE DATABASE pdb1 OPEN READ ONLY; - 切回同步前必须先
ALTER PLUGGABLE DATABASE pdb1 CLOSE IMMEDIATE;,否则START APPLY会报ORA-65115 - 你不能让
PDB1走MAXIMUM PROTECTION,PDB2走MAXIMUM PERFORMANCE;保护模式由LOG_ARCHIVE_DEST_2的SYNC/AFFIRM属性决定,作用于整个 CDB
真正需要“单 PDB 容灾”的场景,往往暴露的是业务隔离诉求没被 CDB 架构满足——这时候该评估是否拆成多个独立 CDB,而不是在 DG 上硬凑。CDB 内部没有物理边界,redo 是共享的,DG 就不可能做 PDB 级开关。











