Oracleのマルチテナント環境では、PDB(Pluggable Database)はデフォルトではCDB(Container Database)再起動時に自動でOPENされません。本記事では、PDBのオープンモードを保持する方法をわかりやすく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🔸 なぜPDBは再起動後にCLOSEされるのか?
OracleではCDBを起動しても、PDBは「MOUNTED」状態で止まっており、明示的に ALTER PLUGGABLE DATABASE pdb_name OPEN を実行する必要があります。
特に業務システムで常に接続可能なPDBが必要な場合は、自動でOPENされる設定が望ましいです。
🔸 PDBのオープンモードを保持するには?
PDBの状態を永続的に保持するためには、SAVE STATEオプションを使用します。
✅ 手順:PDBのオープン状態を保持する設定
以下の手順で設定を行います。
1. CDB$ROOT に接続する
SQL> CONNECT / AS SYSDBA
2. 対象PDBをOPENする
SQL> ALTER PLUGGABLE DATABASE pdb01 OPEN;
3. オープン状態を保存する
SQL> ALTER PLUGGABLE DATABASE pdb01 SAVE STATE;
これで、次回CDB起動時に pdb01 は自動的に OPEN モードで起動されます。
✅ 複数PDBの状態を一括保存するには?
SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE;
特定のPDBを除外したい場合は、手動でOPENして個別に SAVE STATE してください。
✅ 設定の確認方法
保存された状態は、以下のビューで確認できます。
SQL> SELECT PDB_NAME, STATE FROM DBA_PDB_SAVED_STATES;
| PDB_NAME | STATE |
|---|---|
| PDB01 | OPEN |
※ STATE が OPEN であれば、自動でOPENされる設定が保存されています。
🔄 状態の解除(SAVE STATEのリセット)
もし自動OPENを無効にしたい場合は以下のようにします。
SQL> ALTER PLUGGABLE DATABASE pdb01 DISCARD STATE;
🔸 イメージ図で理解する:CDB再起動後の挙動
┌────────────┐
│ CDB起動 │
└────┬───────┘
│
▼
┌──────────────────┐
│ PDB01(OPEN済) │←─ SAVE STATE 設定済
└──────────────────┘
┌──────────────────┐
│ PDB02(MOUNTED) │←─ SAVE STATE 未設定
└──────────────────┘
[oracle@v19single ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 木 5月 1 11:22:17 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
アイドル・インスタンスに接続しました。
SQL> startup ★起動
ORACLEインスタンスが起動しました。
Total System Global Area 1610609864 bytes
Fixed Size 9163976 bytes
Variable Size 385875968 bytes
Database Buffers 1207959552 bytes
Redo Buffers 7610368 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 MOUNTED ★停止している
5 PDB02 MOUNTED ★
SQL> alter pluggable database pdb01 open; ★PDB01 を起動
プラガブル・データベースが変更されました。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ WRITE NO
5 PDB02 MOUNTED
SQL> alter pluggable database pdb01 save state; ★オープンモードを保持設定
プラガブル・データベースが変更されました。
SQL> set lin 1000 pages 1000
SQL> col con_name for a20
SQL> col state for a20
SQL> select con_id,con_name,state from dba_pdb_saved_states;
CON_ID CON_NAME STATE
---------- -------------------- --------------------
3 PDB01 OPEN
SQL> shu immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。
Total System Global Area 1610609864 bytes
Fixed Size 9163976 bytes
Variable Size 385875968 bytes
Database Buffers 1207959552 bytes
Redo Buffers 7610368 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ WRITE NO ★自動で起動している
5 PDB02 MOUNTED
SQL>
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🔍 注意点
- SAVE STATE は Oracle 12.1.0.2以降でサポートされています。
- Oracleの再起動(CDBの再起動)時にのみ有効です。PDB単独での操作には影響しません。
SAVE STATEは SPFILE管理下で有効です。
✍️ まとめ
| 操作 | コマンド例 |
|---|---|
| PDBのOPEN | ALTER PLUGGABLE DATABASE pdb01 OPEN; |
| OPEN状態の保持(SAVE) | ALTER PLUGGABLE DATABASE pdb01 SAVE STATE; |
| OPEN状態の解除(DISCARD) | ALTER PLUGGABLE DATABASE pdb01 DISCARD STATE; |
| 設定状況の確認 | SELECT * FROM DBA_PDB_SAVED_STATES; |
Oracleマルチテナント環境では、PDBの状態管理が運用の鍵を握ります。SAVE STATEを活用して、CDB起動時の手間を省き、安定した運用を目指しましょう。
[参考]
4 CDBの作成および構成




コメント