地址: http://www.oracleplus.net/arch/809.html
运维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; ##### 全部 alter pluggable database all 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; ##### 全部 alter pluggable database all 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; /