はじめに
マルチテナント・アーキテクチャは12cR1より追加された機能であり今さら感も否めないですが、
21c以降で非マルチテナント構成がサポート対象外になることもあり改めて整理していこうと思います。
目次
-
- 1.プラガブル・データベース(PDB)状態確認
- 2.プラガブル・データベース(PDB)起動
- 3.プラガブル・データベース(PDB)停止
- 4.プラガブル・データベース(PDB)自動起動設定
- おわりに
※本記事ではプラガブル・データベース(PDB)起動・停止について記載しております。
マルチテナント・アーキテクチャとはなにか、については
以下、弊社の技術ブログにて概要を記載しておりますので参照頂ければと思います。
「いまさら遅い?Oracle Databaseのコンテナ技術」
https://www.reqtc.com/oracle-3/oracle-pdb-cdb.html
1.プラガブル・データベース(PDB)状態確認
※以降のSQLはCDBに接続した状態での実施を想定したものとなります。
v$pdbsを参照するSQLでPDBのオープン・モードを確認できます。
SQL> set linesize 200 pagesize 1000
SQL> column NAME format a15
SQL> column RESTRICTED format a15
SQL> select CON_ID,NAME,OPEN_MODE,RESTRICTED from v$pdbs order by CON_ID;CON_ID NAME OPEN_MODE RESTRICTED
---------- --------------- ---------- ---------------
2 PDB$SEED READ ONLY NO
3 REQDB READ WRITE NO
RAC環境ではgv$pdbsで各インスタンス上のPDBを確認できます。
SQL> select CON_ID,NAME,OPEN_MODE,RESTRICTED,INST_ID from gv$pdbs order by CON_ID,INST_ID;
CON_ID NAME OPEN_MODE RESTRICTED INST_ID
---------- --------------- ---------- --------------- ----------
2 PDB$SEED READ ONLY NO 1
2 PDB$SEED READ ONLY NO 2
2 PDB$SEED READ ONLY NO 3
3 REQDB READ WRITE NO 1
3 REQDB READ WRITE NO 2
3 REQDB MOUNTED 3
・オープンモードについて
READ WRITE | 起動した状態。問合せおよびユーザー・トランザクションの実行が可能。 |
READ ONLY | 問合せの実行可能、ユーザー変更不可。 |
MIGRATE | データベース・アップグレード・スクリプトの実行が可能。 |
MOUNTED | 停止した状態。オブジェクトの変更不可。 |
※詳細は下部記載の参考ドキュメントを参照ください。
・RESTRICTEDについて
RESTRICTEDがYESの場合、PDBでのRESTRICTED SESSION権限を持つユーザーのみPDBへのアクセスが可能な状態です。
※詳細は下部記載の参考ドキュメントを参照ください。
2.プラガブル・データベース(PDB)起動
alter pluggable database [ <pdb_name> | all ] open [ read write | read only | upgrade ]
※open 以降のオープンモード省略時は「read write」にて起動されます。
- 同CDB上のすべてのPDBを起動する場合
SQL> alter pluggable database all open;
Pluggable database altered.
- 同CDB上の特定のPDBを起動する場合
SQL> alter pluggable database REQDB open;
Pluggable database altered.
- 同CDB上の複数PDBを起動する場合
SQL> alter pluggable database REQDB,REQDB1 open;
Pluggable database altered.
3.プラガブル・データベース(PDB)停止
alter pluggable database [ <pdb_name> | all ] close [ immediate | abort ]
※close 以降のオープンモード省略時は「normal」にて停止されます。
- 同CDB上のすべてのPDBを停止する場合
SQL> alter pluggable database all close;
Pluggable database altered.
- 同CDB上の特定のPDBを停止する場合
SQL> alter pluggable database REQDB close;
Pluggable database altered.
- 同CDB上の複数PDBを停止する場合
SQL> alter pluggable database REQDB,REQDB1 close;
Pluggable database altered.
4.プラガブル・データベース(PDB)自動起動設定
CDB再起動時のPDBのオープン・モードを保持させる方法があり、
PDBの read write 状態を保持させることでCDB起動時にPDBもあわせて起動します。
対象PDBが起動(read write)した状態で以下のSQLを実行し、
DBA_PDB_SAVED_STATESのSTATEがOPENであることを確認します。
SQL> select CON_ID,NAME,OPEN_MODE,RESTRICTED,INST_ID from gv$pdbs order by CON_ID,INST_ID;
CON_ID NAME OPEN_MODE RESTRICTED INST_ID
---------- --------------- ---------- --------------- ----------
2 PDB$SEED READ ONLY NO 1
2 PDB$SEED READ ONLY NO 2
2 PDB$SEED READ ONLY NO 3
3 REQDB READ WRITE NO 1
3 REQDB READ WRITE NO 2
3 REQDB READ WRITE NO 36 rows selected.
SQL> alter pluggable database REQDB save state INSTANCES = ALL;
Pluggable database altered.
SQL> set linesize 200 pagesize 1000
SQL> column CON_NAME format a15
SQL> column INSTANCE_NAME format a15
SQL> column RESTRICTED format a15
SQL> select CON_ID,CON_NAME,INSTANCE_NAME,STATE,RESTRICTED from DBA_PDB_SAVED_STATES;CON_ID CON_NAME INSTANCE_NAME STATE RESTRICTED
---------- --------------- --------------- -------------- ---------------
3 REQDB reqdb1 OPEN NO
3 REQDB reqdb2 OPEN NO
3 REQDB reqdb3 OPEN NO
解除したい場合は以下を実施し対象PDBのレコードが存在しないことを確認します。
SQL> alter pluggable database REQDB discard state INSTANCES = ALL;
Pluggable database altered.
SQL> select CON_ID,CON_NAME,INSTANCE_NAME,STATE,RESTRICTED from DBA_PDB_SAVED_STATES;
no rows selected
【APPENDIX】INSTANCES句の使用
RAC環境においてINSTANCES句を使用することで各インスタンス上のPDBに対して操作することが可能です。
- 起動
SQL> alter pluggable database REQDB open INSTANCES = ALL;
Pluggable database altered.
SQL> select CON_ID,NAME,OPEN_MODE,RESTRICTED,INST_ID from gv$pdbs order by CON_ID,INST_ID;
CON_ID NAME OPEN_MODE RESTRICTED INST_ID
---------- --------------- ---------- --------------- ----------
2 PDB$SEED READ ONLY NO 1
2 PDB$SEED READ ONLY NO 2
2 PDB$SEED READ ONLY NO 3
3 REQDB READ WRITE NO 1
3 REQDB READ WRITE NO 2
3 REQDB READ WRITE NO 3
- 停止
SQL> alter pluggable database REQDB close immediate INSTANCES = ALL;
Pluggable database altered.
SQL> select CON_ID,NAME,OPEN_MODE,RESTRICTED,INST_ID from gv$pdbs order by CON_ID,INST_ID;
CON_ID NAME OPEN_MODE RESTRICTED INST_ID
---------- --------------- ---------- --------------- ----------
2 PDB$SEED READ ONLY NO 1
2 PDB$SEED READ ONLY NO 2
2 PDB$SEED READ ONLY NO 3
3 REQDB MOUNTED 1
3 REQDB MOUNTED 2
3 REQDB MOUNTED 3
以下のように指定することで特定のインスタンスを対象とした操作も可能です。
- 特定のインスタンスを対象
INSTANCES = ('instance_name' [,'instance_name'] ... )
- 指定したインスタンス以外のすべてのインスタンスを対象
INSTANCES = ALL EXCEPT('instance_name' [,'instance_name'] ... )
おわりに
今回はCDB上でのPDBの起動/停止について紹介させて頂きましたが、対象PDBに接続しstartup/shutdownを用いた起動/停止も可能です。
本記事の他にもPDBへの接続方法やCDB/PDB間で共有されるリソース、CDB/PDBで個別設定可能なパラメータ、ディクショナリ・ビュー関連などなど、機会がある際にまとめていきたいと思います。
以上、Re:Qでした。
・参考ドキュメント
Oracle Multitenant管理者ガイド, 19c
https://docs.oracle.com/cd/F19136_01/multi/administering-pdbs-with-sql-plus.html#GUID-7CE00CF0-9D11-44BF-AF8A-F881D129A3F9