2025年8月28日 星期四

5. 管理 Pluggable Database

  • PDB 的開啟與關閉

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.


  • PDB 自動開啟

預設在 CDB 開啟後 PDB 不會自動開啟,可以使用兩種方法讓 PDB 可以在 CDB 開啟後也自動開啟。

  1. 使用 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;


  1. 建立 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


  • 管理 PDB 參數

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;

A screen shot of a computer program

AI-generated content may be incorrect.


另一種方式則是在 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 AWR Report

PDB 層級可以建立當前 PDB 單獨的 AWR Report ,建立 AWR 時選擇 AWR_PDB :

SQL> alter session set container=pdb1;

SQL> @?/rdbms/admin/awrrpt

A screen shot of a computer

AI-generated content may be incorrect.

這邊要注意的是,必須要將參數 awr_pdb_autoflush_enabled 設定為 TRUE , PDB 才會自動產生 

AWR Snapshot ,否則必須手動建立 AWR Snapshot ,於 CDB 層級設定為 TRUE ,所有的 PDB 

都會生效 :