Data Guard在Oracle 12c及以上版本中是CDB级别保护机制,无法为单个PDB单独搭建容灾环境;所有PDB(含CDB$ROOT和PDB$SEED)必须随CDB统一同步、切换与管理,redo传输、应用及角色变更均发生在CDB层。

Data Guard 在 Oracle 12c 及以上版本中,不为单个 PDB 单独搭建容灾环境——它始终是 CDB 级别的保护机制。你无法只同步 POC_PDB 而忽略 CDB$ROOT 或 PDB$SEED,这是架构决定的,不是配置能绕过的。
必须在 CDB 层级启用 Data Guard,PDB 自动跟随
Data Guard 的 redo 传输、应用和角色切换全部发生在 CDB 层:
-
Online Redo Log和控制文件属于 CDB,PDB 没有独立日志 -
Standby Redo Log必须在 CDB 中添加,不能按 PDB 分配 -
ALTER PLUGGABLE DATABASE ... OPEN在备库上仅在角色切换后生效,且所有 PDB 状态由 CDB 统一控制
常见错误现象:
- 备库
OPEN后 PDB 显示MOUNTED或READ ONLY,但无法ALTER PLUGGABLE DATABASE xxx OPEN→ 实际是 CDB 还没完成 redo 应用或未启用 ADG - RMAN restore 时漏掉
PDB$SEED对应的数据文件目录 → 备库启动失败,报错ORA-65011: Pluggable database PDB$SEED does not exist
实操建议:
- 主库开启
FORCE LOGGING前,先确认所有 PDB 已 open(否则部分 DML 不生成 full redo) - 配置
log_archive_dest_2时,DB_UNIQUE_NAME必须与备库 CDB 名一致,而非某个 PDB 名 - 使用
CREATE PLUGGABLE DATABASE ... FROM ...创建新 PDB 后,需在主库执行ALTER SYSTEM SWITCH LOGFILE触发归档,确保变更被传到备库
Snapshot Standby 演练时 PDB 的行为要特别注意
Snapshot Standby 是物理备库的“可写快照”,但它对 PDB 的影响是全局的:
- 切换为 Snapshot Standby 后,整个 CDB(含所有 PDB)变为读写状态,
PDB$SEED也会被写入 - 演练结束后转回物理备库时,会丢弃所有 Snapshot 期间的变更,包括 PDB 内新建表、用户、甚至 DDL
- 若演练中修改了 PDB 的字符集或时区参数,回切后这些设置将丢失(因为它们不存于 redo,而是记录在数据字典)
关键前提必须满足:
- 主备库
COMPATIBLE参数相同,且 Patch RU 版本严格一致(差一个 RU 就可能卡在ALTER DATABASE RECOVER MANAGED STANDBY DATABASE) - FRA 空间 ≥ 20%,否则
FLASHBACK DATABASE失败导致 Snapshot Standby 创建失败,报错ORA-38701: Flashback database log file is not available - 备库必须已成功应用过至少一轮归档日志,且
V$DATABASE.SWITCHOVER_STATUS = 'TO STANDBY'或'SESSIONS ACTIVE'
Oracle 21c 开始支持 PDB-level ADG,但不是传统 Data Guard
Oracle 21c 引入了 PDB-level Active Data Guard,但它本质是 独立部署的 PDB Replication(基于 DBMS_PDB.REPLICATE),和传统物理 DG 完全不同:
- 不依赖 redo 传输,而是通过逻辑复制 + SQL Apply 实现 PDB 级别同步
- 主备 PDB 可位于不同 CDB,甚至不同版本(如 19c 主库 ↔ 21c 备库 PDB)
- 不支持 switchover/failover,只能手动 failover 单个 PDB,CDB 其他 PDB 不受影响
这意味着:
- 如果你用的是 19c 或更早版本,
PDB-level DG不存在,所有所谓“PDB 容灾”都是 CDB 级别操作的误称 - 21c 的 PDB Replication 需额外许可(
Oracle Multitenant+Active Data Guard),且不兼容物理 standby 场景
PDB 容灾真正复杂的地方不在命令怎么敲,而在于:
- 你得清楚当前 Oracle 版本到底支持哪种模型(CDB-level DG?Snapshot Standby?还是 21c 的 PDB Replication?)
- 所有 PDB 的存储路径、tempfile、undo 表空间在备库上必须提前规划好,RMAN restore 不会自动创建缺失目录
-
ALTER DATABASE OPEN READ ONLY后,PDB 默认是 mounted 状态,必须显式ALTER PLUGGABLE DATABASE ALL OPEN,否则应用连不上


















