一、簡介
Oracle 12c引入了多租戶架構,允許一個容器數據庫(Container Database, CDB)托管多個獨立的可插拔數據庫(Pluggable Database, PDB)。本文檔旨在詳細描述如何啟動和關閉CDB及PDB。
二、容器數據庫 (CDB)
2.1 啟動和關閉CDB
啟動和關閉容器數據庫的操作與傳統的實例相同。通過SQL*Plus中的STARTUP和SHUTDOWN命令來完成這些操作,當以特權用戶身份連接到CDB時可以使用以下命令:
STARTUP [NOMOUNT | MOUNT | RESTRICT | UPGRADE | FORCE | READ ONLY]
SHUTDOWN [IMMEDIATE | TRANSACTIONAL | NORMAL | ABORT]
例如:
STARTUP NOMOUNT;
STARTUP MOUNT;
STARTUP RESTRICT;
STARTUP UPGRADE;
STARTUP FORCE;
STARTUP READ ONLY;SHUTDOWN IMMEDIATE;
SHUTDOWN TRANSACTIONAL;
SHUTDOWN NORMAL;
SHUTDOWN ABORT;
二、 可插拔數據庫 (PDB)
2.1 使用SQL*Plus命令啟動和停止PDB
當以特權用戶身份連接到特定的PDB時,可以使用以下SQL*Plus命令來啟動或停止該PDB:
STARTUP FORCE;
STARTUP OPEN READ WRITE [RESTRICT];
STARTUP OPEN READ ONLY [RESTRICT];
STARTUP UPGRADE;
SHUTDOWN [IMMEDIATE | TRANSACTIONAL | NORMAL | ABORT];
示例:
STARTUP FORCE;
SHUTDOWN IMMEDIATE;
STARTUP OPEN READ WRITE RESTRICT;
SHUTDOWN;
STARTUP;
SHUTDOWN IMMEDIATE;
2.2 使用ALTER PLUGGABLE DATABASE命令啟動和停止PDB
-
在PDB中執行
當以特權用戶身份連接到PDB時,可以使用以下命令來打開或關閉當前PDB:
ALTER PLUGGABLE DATABASE OPEN READ WRITE [RESTRICTED] [FORCE];
ALTER PLUGGABLE DATABASE OPEN READ ONLY [RESTRICTED] [FORCE];
ALTER PLUGGABLE DATABASE OPEN UPGRADE [RESTRICTED];
ALTER PLUGGABLE DATABASE CLOSE [IMMEDIATE];
示例:
ALTER PLUGGABLE DATABASE OPEN READ ONLY FORCE;
ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE OPEN READ WRITE;
ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;
-
在CDB中執行
當以特權用戶身份連接到CDB時,可以使用以下命令來打開或關閉一個或多個PDB:
ALTER PLUGGABLE DATABASE <pdb-name-clause> OPEN READ WRITE [RESTRICTED] [FORCE];
ALTER PLUGGABLE DATABASE <pdb-name-clause> OPEN READ ONLY [RESTRICTED] [FORCE];
ALTER PLUGGABLE DATABASE <pdb-name-clause> OPEN UPGRADE [RESTRICTED];
ALTER PLUGGABLE DATABASE <pdb-name-clause> CLOSE [IMMEDIATE];
<pdb-name-clause>可以是:
- 一個或多個PDB名稱,以逗號分隔的列表。
- ALL關鍵字表示所有PDB。
- ALL EXCEPT關鍵字后跟一個或多個PDB名稱,以逗號分隔的列表,表示一組PDB的子集。
示例:
ALTER PLUGGABLE DATABASE pdb1, pdb2 OPEN READ ONLY FORCE;
ALTER PLUGGABLE DATABASE pdb1, pdb2 CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER PLUGGABLE DATABASE ALL CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE ALL EXCEPT pdb1 OPEN;
ALTER PLUGGABLE DATABASE ALL EXCEPT pdb1 CLOSE IMMEDIATE;
2.3 PDB 自動啟動
在Oracle 12.1.0.2補丁集之后,引入了保存PDB啟動狀態的能力,因此不再需要為自動啟動PDB而實現觸發器。
在12.1.0.2之前的版本中,當CDB啟動時,所有的PDB會保持掛載狀態。默認情況下沒有機制可以在CDB啟動時自動啟動它們。要實現這一點,可以創建一個系統觸發器,在CDB啟動后打開一些或全部PDB。
CREATE OR REPLACE TRIGGER open_pdbs
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END open_pdbs;
/
您可以根據需求自定義此觸發器,以便不是所有的PDB都會啟動。
2.4 保存和丟棄PDB啟動狀態(12.1.0.2 及以后)
從12.1.0.2補丁集開始,可以通過ALTER PLUGGABLE DATABASE命令保存PDB的啟動狀態,使其在CDB重啟后仍然有效。我們先來看一下正常CDB重啟后的結果。
注意在重啟前PDB處于READ WRITE模式,但在重啟后變為MOUNTED模式。
SELECT name, open_mode FROM v$pdbs;
NAME OPEN_MODE
---- ----------
PDB$SEED READ ONLY
PDB1 READ WRITE
PDB2 READ WRITE
然后我們重啟CDB:
SHUTDOWN IMMEDIATE;
STARTUP;
SELECT name, open_mode FROM v$pdbs;
NAME OPEN_MODE
---- ----------
PDB$SEED READ ONLY
PDB1 MOUNTED
PDB2 MOUNTED
接下來,我們打開兩個可插拔數據庫,但只保存其中一個的狀態:
ALTER PLUGGABLE DATABASE pdb1 OPEN;
ALTER PLUGGABLE DATABASE pdb2 OPEN;
ALTER PLUGGABLE DATABASE pdb1 SAVE STATE;
DBA_PDB_SAVED_STATES視圖顯示有關容器保存狀態的信息:
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
現在重啟CDB將給出不同的結果:
SHUTDOWN IMMEDIATE;
STARTUP;
SELECT name, open_mode FROM v$pdbs;
NAME OPEN_MODE
---- ----------
PDB$SEED READ ONLY
PDB1 READ WRITE
PDB2 MOUNTED
請注意,狀態僅在容器處于READ ONLY或READ WRITE模式時被保存并在DBA_PDB_SAVED_STATES視圖中可見。對于處于MOUNTED模式的容器,ALTER PLUGGABLE DATABASE ... SAVE STATE命令不會報錯,但也不會記錄任何內容,因為這是CDB重啟后的默認狀態。
此外,像其他ALTER PLUGGABLE DATABASE命令一樣,PDB可以通過單獨指定、逗號分隔列表、ALL或ALL EXCEPT關鍵詞來標識。在RAC環境中還可以添加INSTANCES子句來指定實例,但是無論INSTANCES子句如何,SAVE/DISCARD STATE命令僅影響當前實例。
三、結論
通過遵循上述指導,您可以安全高效地管理Oracle 12c環境中的CDB和PDB的啟動和關閉過程,從而更好地利用多租戶架構的優勢。隨著技術的進步,預計未來版本中這項功能將會更加完善,為用戶提供更佳的操作體驗。