






















以 sysdba 登录 CDB:
SELECT * FROM v$version;
或:
SELECT VERSION FROM PRODUCT_COMPONENT_VERSION WHERE PRODUCT LIKE 'Oracle Database%';
Oracle 从 12.1.0.2 开始提供了“保存 PDB 打开状态”的功能:
你在 PDB 打开(READ WRITE/READ ONLY)状态下执行:
ALTER PLUGGABLE DATABASE <pdb名> SAVE STATE;
Oracle 会把当前打开状态记录下来,下次 CDB 启动时,自动把该 PDB 恢复成这个状态。
状态保存在视图 DBA_PDB_SAVED_STATES 里。
假设你的 PDB 叫 PDB1,CDB 叫 CDB$ROOT。
1)以 sysdba 登录 CDB 根容器:
sqlplus / as sysdba
2)确认当前 PDB 状态:
SHOW PDBS;
或:
SELECT NAME, OPEN_MODE FROM V$PDBS;
3)打开 PDB:
ALTER PLUGGABLE DATABASE pdb1 OPEN;
4)保存 PDB 状态(让下次 CDB 启动时自动打开):
ALTER PLUGGABLE DATABASE pdb1 SAVE STATE;
5)查看已保存的状态:
COLUMN CON_NAME FORMAT A20
COLUMN INSTANCE_NAME FORMAT A20
SELECT CON_NAME, INSTANCE_NAME, STATE FROM DBA_PDB_SAVED_STATES;
能看到类似:
CON_NAME INSTANCE_NAME STATE
-------------------- -------------------- --------------
PDB1 cdb1 OPEN
表示已保存为 OPEN 状态。
6)重启 CDB 验证:
SHUTDOWN IMMEDIATE;
STARTUP;
-- 等待实例完全启动后
SHOW PDBS;
正常情况下,PDB1 应该已经是 READ WRITE,不再是 MOUNTED。
如果你有多个 PDB,想让全部自动打开,可以一次性处理:
1)打开所有 PDB:
ALTER PLUGGABLE DATABASE ALL OPEN;
2)保存所有 PDB 的状态:
ALTER PLUGGABLE DATABASE ALL SAVE STATE;
这样,以后 CDB 重启时,所有 PDB 都会自动打开到之前保存的状态(READ WRITE 或 READ ONLY)。
如果你不想某个 PDB 再自动打开,可以清除其保存状态:
ALTER PLUGGABLE DATABASE pdb1 DISCARD STATE;
如果你的版本是 12.1.0.1 或更早,不支持 SAVE STATE,可以在 CDB 上创建一个系统触发器,在数据库启动后自动打开 PDB。
以 sysdba 登录 CDB:
CREATE OR REPLACE TRIGGER open_pdbs
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END open_pdbs;
/
这个触发器会在每次 CDB STARTUP 后自动执行 ALTER PLUGGABLE DATABASE ALL OPEN,把所有 PDB 打开。
如果你只想自动打开某几个 PDB,可以在触发器里写具体名字:
CREATE OR REPLACE TRIGGER open_pdbs
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE pdb1, pdb2 OPEN';
END open_pdbs;
/
ALTER PLUGGABLE DATABASE ... SAVE STATE;,这是官方推荐方式,无需触发器。AFTER STARTUP ON DATABASE,在触发器里 ALTER PLUGGABLE DATABASE ALL OPEN 或指定 PDB 名。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。