天萃荷净
运维DBA反映当前Oracle 12C数据库环境的PDB不能随CDB一起启动,结合案例分享关于设置pdb随cdb一起启动的方法
在Oracle 12.1.0.1版本中,在cdb数据库启动过程中,业务pdb无法自动open,如果要实现该功能,需要人工写触发器来实现cdb open后,pdb 给open起来.在12.1.0.2及其以后版本,可以通过设置ALTER PLUGGABLE DATABASE PDB SAVE STATE来实现在cdb open之后业务pdb能够自动open.
1.数据库启动后pdb未自动open
XFF_CDB$ROOT@SYS> startup
ORACLE 例程已经启动。
Total System Global Area 805306368 bytes
Fixed Size 3050800 bytes
Variable Size 394265296 bytes
Database Buffers 297795584 bytes
Redo Buffers 5337088 bytes
In-Memory Area 104857600 bytes
数据库装载完毕。
数据库已经打开。
XFF_CDB$ROOT@SYS> select * from v$version;
BANNER CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production 0
PL/SQL Release 12.1.0.2.0 - Production 0
CORE 12.1.0.2.0 Production 0
TNS for 64-bit Windows: Version 12.1.0.2.0 - Production 0
NLSRTL Version 12.1.0.2.0 - Production 0
XFF_CDB$ROOT@SYS> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB MOUNTED
2.查询dba_pdb_saved_states无记录
XFF_CDB$ROOT@SYS> select con_name, state from dba_pdb_saved_states;
未选定行
在数据库mount状态下save state
XFF_CDB$ROOT@SYS> ALTER PLUGGABLE DATABASE PDB save state;
插接式数据库已变更。
XFF_CDB$ROOT@SYS> select con_name, state from dba_pdb_saved_states;
未选定行
pdb为mount状态下,执行save state无记录,证明save state不成功
在数据库open状态下save state—-设置pdb随cdb启动
XFF_CDB$ROOT@SYS> ALTER PLUGGABLE DATABASE PDB open;
插接式数据库已变更。
XFF_CDB$ROOT@SYS> ALTER PLUGGABLE DATABASE PDB save state;
插接式数据库已变更。
XFF_CDB$ROOT@SYS> col con_name for a20
XFF_CDB$ROOT@SYS> select con_name, state from dba_pdb_saved_states;
CON_NAME STATE
-------------------- --------------
PDB OPEN
pdb为open状态下,执save state成功.
需要注意save state需要在pdb open情况下执行才能够生效.
3.重启数据库测试pdb随cdb启动
XFF_CDB$ROOT@SYS> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
XFF_CDB$ROOT@SYS> startup
ORACLE 例程已经启动。
Total System Global Area 805306368 bytes
Fixed Size 3050800 bytes
Variable Size 364905168 bytes
Database Buffers 327155712 bytes
Redo Buffers 5337088 bytes
In-Memory Area 104857600 bytes
数据库装载完毕。
数据库已经打开。
XFF_CDB$ROOT@SYS> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB READ WRITE NO
禁用pdb随cdb启动—DISCARD STATE
XFF_CDB$ROOT@SYS> ALTER PLUGGABLE DATABASE PDB DISCARD state;
插接式数据库已变更。
XFF_CDB$ROOT@SYS> select con_name, state from dba_pdb_saved_states;
未选定行
XFF_CDB$ROOT@SYS> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
XFF_CDB$ROOT@SYS> startup
ORACLE 例程已经启动。
Total System Global Area 805306368 bytes
Fixed Size 3050800 bytes
Variable Size 364905168 bytes
Database Buffers 327155712 bytes
Redo Buffers 5337088 bytes
In-Memory Area 104857600 bytes
数据库装载完毕。
数据库已经打开。
XFF_CDB$ROOT@SYS> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB MOUNTED
XFF_CDB$ROOT@SYS>
4.12.1.0.1中设置pdb随cdb启动
CREATE TRIGGER open_all_pdbs
AFTER STARTUP
ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'alter pluggable database all open';
END open_all_pdbs;
/
--------------------------------------ORACLE-DBA----------------------------------------
最权威、专业的Oracle案例资源汇总之【学习笔记】Oracle 12C 设置pdb随cdb一起启动的方法