在Oracle 12c/19c多租戶環境中,預設情況下,使用startup命令啟動資料庫實例後,你會發現PDB資料庫的狀態為MOUNT狀態,PDB不會隨著CDB啟動而啟動。如下例子所示: SQL> startupORACLE instance started.Total System Global ...
在Oracle 12c/19c多租戶環境中,預設情況下,使用startup命令啟動資料庫實例後,你會發現PDB資料庫的狀態為MOUNT狀態,PDB不會隨著CDB啟動而啟動。如下例子所示:
SQL> startup
ORACLE instance started.
Total System Global Area 2432695872 bytes
Fixed Size 9137728 bytes
Variable Size 620756992 bytes
Database Buffers 1795162112 bytes
Redo Buffers 7639040 bytes
Database mounted.
Database opened.
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PSUAT MOUNTED
SQL>
Oracle 12.1.0.2之前,CDB啟動後,所有的PDB都處於載入狀態(MOUNTED)。CDB啟動時,沒有預設機制自動啟動PDB。只能通過在CDB上建立一個系統觸發器來自動啟動部分或所有PDB,如下所示:
CREATE OR REPLACE TRIGGER open_pdbs
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END open_pdbs;
/
Oracle12.1.0.2補丁集已引入了保持PDB啟動狀態的能力,因此,不用再通過上面的觸發器方式來實現自動打開PDB。可以通過下麵方式讓PDB資料庫自動啟動。
SQL>ALTER PLUGGABLE DATABASE PTEST1 OPEN;
SQL>ALTER PLUGGABLE DATABASE PTEST1 SAVE STATE;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP
SQL>SHOW PDBS;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PTEST2 MOUNTED
4 PTEST1 READ WRITE
如上所示,使用命令保存了PDB的STATE後,下次使用命令startup重啟實例,對應的PDB就會啟動到相應狀態(READ WRITE)
--查看PDB保存的狀態
COLUMN CON_NAME FORMAT A20
COLUMN INSTANCE_NAME FORMAT A20
SELECT CON_NAME, INSTANCE_NAME, STATE FROM DBA_PDB_SAVED_STATES;
--被保存的狀態可以通過如下命令被廢棄。
ALTER PLUGGABLE DATABASE T1PDB DISCARD STATE;
更多詳細信息,可以參考官方文檔How to Preserve Open Mode of PDBs When the CDB Restarts ( 文檔 ID 1933511.1) 。