Oracle 12c RAC 中 PDB 高可用依赖显式控制各节点 OPEN 状态、动态注册 service_name 及 CDB 级资源计划,缺一不可;建库必须启用多租户且不可逆,PDB 需在每个实例手动 OPEN READ WRITE,监听禁用静态配置,资源隔离须逐个 PDB 绑定计划。
oracle 12c rac 中 pdb 的高可用不是靠“自动同步状态”实现的,而是靠显式控制每个节点上的 open 状态 + 正确注册服务名 + 避免静态监听配置。漏掉任一环节,应用就会在某个节点上连不上 pdb。
建库阶段必须启用多租户,否则无法补救
RAC 环境下,CDB 必须从建库起就是容器数据库,createAsContainerDatabase true 是不可逆开关。DBCA 图形界面中要在“配置选项”页勾选“创建为容器数据库”;静默模式下该参数绝对不能省略:
dbca -silent -createDatabase \ -createAsContainerDatabase true \ -templateName $ORACLE_HOME/assistants/dbca/templates/General_Purpose.dbc \ -gdbname orcl \ -storageType ASM \ -diskGroupName DATA \ -characterSet AL32UTF8 \ -totalMemory 4096
常见错误:用默认模板建库后发现没开多租户,试图后期执行 create pluggable database —— 直接报 ORA-65096 或 ORA-65131,RAC 下无 workaround。
PDB 在各 RAC 节点必须显式 OPEN READ WRITE
DBCA 创建 PDB 后,它在所有实例上初始状态都是 MOUNTED,不是自动广播的 READ WRITE。只在一个节点执行 ALTER PLUGGABLE DATABASE pdb_name OPEN,其他节点仍卡在 MOUNTED,应用路由过去就报 ORA-01033。
- 先确认连接的是
CDB$ROOT:SHOW CON_NAME输出必须是CDB$ROOT - 查全局状态:
SELECT CON_ID, NAME, OPEN_MODE, INST_ID FROM GV$PDBS WHERE NAME = 'ORCLPDB'(注意是GV$PDBS,不是V$PDBS) - 对每个
INST_ID对应的节点,分别执行:ALTER PLUGGABLE DATABASE orclpdb OPEN READ WRITE - 或更稳妥:在所有 RAC 节点上手动运行一遍该命令,不依赖脚本自动分发
连接必须用 service_name,且监听需动态注册
PDB 不是独立实例,不能用 SID 连接。客户端字符串里必须用注册的 service_name,例如:sqlplus sys/pass@host:1521/orclpdb。监听器必须动态注册,静态注册(SID_LIST_LISTENER)会干扰 PDB 服务发现。
- 删掉
listener.ora中所有SID_DESC块,尤其是针对 PDB 的 - 确保 CDB 实例设置了
service_names参数(默认已含),并运行ALTER SYSTEM REGISTER触发动态注册 - 验证监听状态:
lsnrctl status应显示类似Service "orclpdb" has 1 instance(s),且每个实例状态为READY - 不要在
tnsnames.ora中硬编码SID;若必须配别名,用DBMS_SERVICE.CREATE_SERVICE,但注意重启后需手动START_SERVICE
资源隔离靠 CDB 级资源计划,不是 RAC instance caging
RAC 的 instance caging 控制整个实例 CPU,对 PDB 无效。PDB 间资源隔离必须通过 CDB 的资源管理器(Resource Manager)实现:
- 在
CDB$ROOT中创建资源计划:CREATE PLAN plan_pdb1 ... - 为每个 PDB 分配消费者组和 CPU 比例:
CREATE CONSUMER GROUP cg_pdb1 ... - 绑定 PDB 到计划:
ALTER PLUGGABLE DATABASE orclpdb SET PARAMETER RESOURCE_MANAGER_PLAN = 'plan_pdb1' -
CONTAINER=ALL不适用于资源计划设置,必须逐个 PDB 显式指定
真正容易被忽略的是:PDB 的 OPEN 状态不跨节点同步、监听器静态注册会屏蔽 PDB 服务、以及资源计划必须在每个 PDB 内单独启用——这三个点任何一个出错,高可用就形同虚设。


















