重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛
标题:
让 PDB 随 CDB 启动自动 OPEN 的两种方式
[打印本页]
作者:
mahan
时间:
2026-2-8 19:56
标题:
让 PDB 随 CDB 启动自动 OPEN 的两种方式
在 Oracle 19c 多租户(CDB / PDB)架构中,一个经常被忽略但极易踩坑的问题是:
CDB 重启后,PDB 并不会自动处于 OPEN 状态
尤其是在做升级、补丁、系统重启或例行维护后,如果没有额外处理,业务 PDB 很可能停留在 MOUNTED,直接导致应用无法连接。
本文基于 Oracle Database 19c,结合实际运维场景,系统性总结 PDB 开机自启动的两种常见实现方式,并给出使用建议。
一、背景现象:为什么 PDB 不会自动 OPEN?
默认情况下,Oracle 的行为是:
• CDB 启动后,仅保证 CDB 本身 OPEN
• PDB 不会自动 OPEN
• PDB$SEED 始终为 READ ONLY
• 业务 PDB 状态取决于是否“保存过启动状态”
先来看一个典型现象。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
------ --------- ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 MOUNTED
5 PDB3 MOUNTED
即便你曾经手工打开过 PDB:
ALTER PLUGGABLE DATABASE ALL OPEN;
只要 CDB 重启,PDB 依然会回到 MOUNTED。
二、关键视图:DBA_PDB_SAVED_STATES
Oracle 为 PDB 的自动启动提供了原生机制,核心视图是:
DBA_PDB_SAVED_STATES
该视图记录的是:
某个 PDB 在某个实例上,被“保存”的启动状态
常用字段说明:
字段 含义
CON_ID PDB ID
CON_NAME PDB 名称
INSTANCE_NAME 保存的状态(OPEN / MOUNTED)
RESTRICTED 是否受限模式
默认情况下,该视图是空的。
SQL> select * from dba_pdb_saved_states;
no rows selected
三、方法一(推荐):SAVE STATE(官方标准方式)
1、手工打开目标 PDB
ALTER PLUGGABLE DATABASE pdb3 OPEN;
确认状态:
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
------ -------- ---------- ----------
5 PDB3 READ WRITE NO
2、保存 PDB 启动状态
ALTER PLUGGABLE DATABASE pdb3 SAVE STATE;
此时查看保存结果:
SELECT con_name, state
FROM dba_pdb_saved_states;
CON_NAME STATE
-------- -----
PDB3 OPEN
3、重启 CDB 验证
SHUTDOWN IMMEDIATE;
STARTUP;
再次查看:
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE
------ -------- ----------
5 PDB3 READ WRITE
PDB 已随 CDB 启动自动 OPEN
方法一特点总结
优点:
• Oracle 官方推荐
• 配置简单、可控
• 不依赖触发器
• 支持 RAC(每实例保存)
注意事项:
• SAVE STATE 是 按实例保存
• RAC 环境需在对应实例执行
• 删除 PDB 或 UNPLUG 后记录失效
生产环境首选方案
四、方法二:AFTER STARTUP 触发器(兜底方案)
在部分老系统或特殊管控场景中,也会使用 数据库启动触发器。
1 创建触发器
CREATE OR REPLACE TRIGGER open_pdbs
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END;
/
也可以精确控制某个 PDB:
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE pdb2 OPEN';
2 重启 CDB 验证
SHUTDOWN IMMEDIATE;
STARTUP;
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE
------ -------- ----------
3 PDB1 READ WRITE
4 PDB2 READ WRITE
5 PDB3 READ WRITE
方法二风险提示
不推荐作为长期方案,原因包括:
• 触发器依赖数据库启动流程
• 启动阶段异常可能导致实例卡顿
• 所有 PDB 强制 OPEN,不够精细
• 排障复杂(启动即执行)
仅作为临时方案或历史系统兼容手段
五、实践建议(运维经验)
结合实际项目经验,建议:
• 生产环境
• 使用 ALTER PLUGGABLE DATABASE SAVE STATE
• 升级 / 临时应急
• 可短期使用触发器
• RAC 场景
• 明确 PDB 在每个实例的启动策略
• 交付文档
• 必须明确:哪些 PDB 需要自启动,哪些不需要
六、结语
PDB 自动 OPEN 看似是个“小配置”,但在:
• 数据库升级
• 系统重启
• 高可用切换
• 运维交接
这些场景下,往往决定了业务是否能第一时间恢复。
欢迎光临 重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛 (http://bbs.cqsztech.com/)
Powered by Discuz! X3.2