4章 CDB,PDBの管理
本章ではCDB,PDB基本操作についてご紹介していきます。
マルチコンテナ環境の管理方法
本章ではCDB、PDBの管理方法についてご紹介していきます。
CDB、PDBの接続方法や、CDBの起動停止方法についてご紹介していきます。
CDBへのログイン
ルートDB(CDB)へのログインは非CDBと同じログイン方法です。
$ sqlplus / as sysdba
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
show con_nameコマンドで現在接続中のDB名を確認することが出来ます。
CDBのログインは通常のデータベースのログインと変わりはありません。
PDBへのログイン
PDBへの接続は以下のコマンドを使用します。
[構文] PDBへの接続方法
SQL> ALTER SESSION SET CONTAINER = PDB名;
上記コマンドを使用するにはSET CONTAINER権限が必要です。
SQL> alter session set container = pdb1;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
PDB1
それ以外の接続方法はリスナー経由での接続が可能です。
一般ユーザはこちらのリスナー経由での接続を行いましょう。
今回はまだ一般ユーザを作成していないのでSYSTEMユーザで接続してみます。
TNSファイルには以下の記載をしています。
$ cat $ORACLE_HOME/network/admin/tnsnames.ora
PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linux01)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PDB1)
)
)
$ sqlplus system/manager@pdb1
SQL> show con_name
CON_NAME
------------------------------
PDB1
[補足]
リスナーへのPDB情報はLOCAL_LISTENERパラメータで設定されているリスナーに
対して、PDB起動時に送信されます。デフォルトは自動的に設定されます。
※LOCAL_LISTENERパラメータはtnsnames.oraに記載されているエイリアスでも可能
PDBの場合は上記のようにALTER SESSIONコマンドを使用するかTNSファイルにネットサービス名を登録して接続する方法があります。
またリスナーは以下のコマンドでPDBの情報を確認することができます。
$ SPAN>lsnrctl service
LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 19-JAN-2017 18:25:17
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux01)(PORT=1521)))
Services Summary...
Service "orcl" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
...
Service "pdb1" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
Service "pdb2" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
The command completed successfully
CDBであるorclの他に、PDBのpdb1,pdb2がリスナーのデータベース情報に登録されています。
CDB,PDBの停止
次にCDBとPDBの起動停止方法について確認していきましょう。
CDBの起動、停止
ルートDB(CDB)を停止すると、全PDBは停止します。
停止方法は通常の停止と同じでSHUTDOWNコマンドで実施します。
では実施してみましょう。
SQL> SPAN>show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> alter session set container = pdb1;
alter session set container = pdb1
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0
CDBはメインのデータベースである為、CDBが停止するとPDBは停止します。
起動方法も非CDB同様です。またCDBを起動しても、PDBは自動起動しません。
自動起動を行いたい場合はトリガーなどを使用して起動する方法を検討する必要があります。
SQL> startup
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2296576 bytes
Variable Size 746587392 bytes
Database Buffers 314572800 bytes
Redo Buffers 5480448 bytes
Database mounted.
Database opened.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 MOUNTED
4 PDB2 MOUNTED
PDBはMOUNTEDの状態であり、起動していないことが分かります。
PDBの起動、停止
PDBの起動停止方法は2通りあります。
1.ALTER PLUGGABLEコマンドを使用した起動、停止
2.STARTUP、SHUTDOWNコマンドを使用した起動、停止
それでは構文を確認していきましょう。
[構文] PDBへの起動停止
SQL> ALTER PLUGGABLE DATABASE PDB名 OPEN|CLOSE[IMMEDIATE];
上記コマンドはCDB,PDB上で実行することが出来ます。
通常のSTARTUP、SHUTDOWNでもPDBの起動停止は行えますが、
この場合はPDBに切り替えて実施する必要があります。
IMMEDIATEは現在実行中のトランザクションをロールバックし停止します。
デフォルトは通常のシャットダウンで、全セッションがログアウトするまで待機します。
では実際に試して見ます。
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 MOUNTED
4 PDB2 MOUNTED
SQL> ALTER PLUGGABLE DATABASE PDB1 OPEN;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 MOUNTED
PDB1がREAD WRITEになり、PDBが起動しました。
SQL> ALTER PLUGGABLE DATABASE PDB1 CLOSE;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 MOUNTED
4 PDB2 MOUNTED
PDB1がMOUTEDになり、PDBが停止しました。
次にSTARTUP、SHUTDOWNも試してみます。
SQL> alter session set container = pdb1;
Session altered.
SQL> startup
Pluggable Database opened.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 PDB1 READ WRITE NO
SQL> shutdown immediate
Pluggable Database closed.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 PDB1 MOUNTED
また複数PDBが存在する場合、ALLオプションやEXCEPTオプションを使用し、一度に複数PDBを起動停止することが可能です。
[構文] 複数PDBへの起動停止
SQL> ALTER PLUGGABLE DATABASE ALL PDB名 [EXCEPT PDB名] OPEN|CLOSE;
ALLオプションはすべてのPDBを起動します。
ただしEXCEPTオプションは指定した場合、指定したPDBは除外されます。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 MOUNTED
SQL> alter pluggable database all open;
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 READ WRITE NO
今回PDB1は既に起動していましたが、ALLを指定して起動してもエラーにはなりません。
次にEXCEPTオプションを使用して、PDB1のみ停止してみます。
SQL> alter pluggable database all except pdb2 close;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 MOUNTED
4 PDB2 READ WRITE NO
上記のように複数PDBを起動する場合は、ALLオプションを使用できます。
以上がCDB,PDBの起動方法です。
CDB,PDBの初期化パラメータの変更
初期化パラメータはCDB上に1つ存在していますが、パラメータは各PDBで変更が可能です。
コマンドも非CDBと同様ALTER SYSTEM文を使用しますが、PDBを変更する際はSID句が必要です。
[構文] PDBのパラメータ変更
SQL> ALTER SYSTEM SET パラメータ名 = 値 [CONTAINER =ALL|CURRENT][SCOPE句];
CONTAINER句は、変更する範囲を制御します。デフォルトはCURRENTであり、設定したパラメータはすべてのPDBに反映されます。CURRENTはコマンドを発行したDBのみ反映します。
またCONTAINER =ALLはルートDB(CDB)のみ実行されます。
PDBで実行した場合は、「ORA-65050: Common DDLs only allowed in CDB$ROOT」上記のメッセージが出力されます。
PDB上で変更可能なパラメータすべてではなく、一部のパラメータです。
どのパラメータが変更可能かは以下のコマンドで確認できます。
SQL> SELECT NAME FROM V$SYSTEM_PARAMETER
2 WHERE ISPDB_MODIFIABLE='TRUE' ORDER BY NAME;
NAME ISPDB
-------------------------------------------------- -----
O7_DICTIONARY_ACCESSIBILITY TRUE
asm_diskstring TRUE
cell_offload_compaction TRUE
cell_offload_decryption TRUE
・・・
statistics_level TRUE
temp_undo_enabled TRUE
timed_os_statistics TRUE
timed_statistics TRUE
workarea_size_policy TRUE
xml_db_events TRUE
171 rows selected.
ではPDBでも変更可能なOPEN_CURSORパラメータを変更してみます。
SESSIONSパラメータはDBの接続数を制限するパラメータです。
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> show parameter open_cursors
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 1000
SQL> alter system set open_cursors = 100 CONTAINER = ALL;
System altered.
SQL> show parameter open_cursors
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 100
SQL> alter session set container = pdb1;
Session altered.
SQL> show parameter open_cursors
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 100
SQL> conn / as sysdba
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> alter system set open_cursors = 200 CONTAINER = CURRENT;
System altered.
SQL> show parameter open_cursors
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 200
SQL> alter session set container = pdb1;
Session altered.
SQL> show parameter open_cursors
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 100
各CDB,PDBのパラメータが変更できていることを確認できました。
本章は以上となります。PDBの基本的な管理方法についてご紹介していきました。
基本的な操作は通常DBと異なりますが、実機で試しつつマスターしていきましょう。