PDB 的開啟與關閉使用的是 alter pluggable database 命令,可以於 CDB 或是 PDB 層級進行操作 :
開啟 PDB1 (如為 RAC 則須加上 instances=all 否則其它 node 的 PDB1 不會開啟) SQL> alter pluggable database pdb1 open instances=all; 開啟全部的 PDB ,只能於 CDB 層級操作 SQL> alter pluggable database all open instances=all; 關閉 PDB1 SQL> alter pluggable database pdb1 close immediate instances=all; 關閉全部的 PDB ,只能於 CDB 層級操作 SQL> alter pluggable database all close immediate instances=all; |
在 PDB 層級也可以使用傳統的 startup 與 shutdown 進行操作 :
開啟 PDB1 (只能開啟當前 node 的 PDB1) SQL> alter session set container=pdb1; Session altered. SQL> startup Pluggable Database opened. 關閉 PDB1 (只能關閉當前 node 的 PDB1) SQL> alter session set container=pdb1; Session altered. SQL> shutdown immediate Pluggable Database closed. |
預設在 CDB 開啟後 PDB 不會自動開啟,可以使用兩種方法讓 PDB 可以在 CDB 開啟後也自動開啟。
使用 save state
save state 紀錄原本 PDB 的狀態,若原本 PDB 就處於開啟的狀態,那麼下次 CDB 開啟的時候有
save state 的 PDB 也會自動開啟 :
針對 PDB1 save state SQL> alter pluggable database pdb1 save state; 全部 PDB save state SQL> alter pluggable database all save state; 取消 PDB1 save state SQL> alter pluggable database pdb1 discard state; 取消全部 PDB save state SQL> alter pluggable database all discard state; |
透過 dba_pdb_saved_states 可以查詢哪些 PDB 有 save state :
SQL> select con_id,con_name,state from dba_pdb_saved_states; |

建立 PDB Service
如果為 RAC 或是有安裝 Grid Infrastructure 且 CDB 有註冊在 GI ,那麼可以為 PDB 建立 service ,
在 CDB 啟動的時候會連帶 PDB 與 PDB service 一起開啟 :
PDB1 建立 service pdb_s $ srvctl add service -d orapdb -pdb pdb1 -s pdb_s |
Multitenant 架構下有些參數只能在 CDB 層級變更,有些參數可以在個別的 PDB 進行變更,可以查詢
v$parameter 的 ISPDB_MODIFIABLE 來確認參數是否可以於 PDB 層級進行變更。於 CDB 層級查詢
pdb_spfile$ 可以列出 PDB 層級變更的非預設參數,若是參數沒有進行過變更則不會顯示在 pdb_spfile$ :
SQL> select a.name,b.name,value$ from v$pdbs a,pdb_spfile$ b where a.con_uid=b.pdb_uid order by 1; |

另一種方式則是在 PDB 層級產出 pfile ,此時 pfile 所列出的也是只有變更過的參數 :
SQL> alter session set container=pdb1; Session altered. SQL> create pfile='/tmp/pdb1.ora' from spfile; File created. [oracle@db19c ~]$ cat /tmp/pdb1.ora *.db_securefile='PREFERRED' |
PDB 層級可以建立當前 PDB 單獨的 AWR Report ,建立 AWR 時選擇 AWR_PDB :
SQL> alter session set container=pdb1; SQL> @?/rdbms/admin/awrrpt |

這邊要注意的是,必須要將參數 awr_pdb_autoflush_enabled 設定為 TRUE , PDB 才會自動產生
AWR Snapshot ,否則必須手動建立 AWR Snapshot ,於 CDB 層級設定為 TRUE ,所有的 PDB
都會生效 :
