Oracle 12c以降のCDB構成では、CDBが起動してもPDBは自動では開かれません。
一般的には SAVE STATE を使用して自動起動させますが、明示的にSQLスクリプトで開く方法も有効です。
本記事では、ALTER PLUGGABLE DATABASE ALL OPEN をスクリプトで実行する構成を紹介します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. 前提環境
| 項目 | 内容 |
|---|---|
| Oracle構成 | CDB+複数PDB(例:PDB1, PDB2) |
| OS | systemd対応Linux(例:Oracle Linux 8) |
| Oracleユーザー | oracle |
| ORACLE_SID | cdb01(CDB名) |
.bash_profile | 設定済(ORACLE_HOME, ORACLE_SID等) |
2. 手順概要
- Oracle起動後に
ALTER PLUGGABLE DATABASE ALL OPENを実行するSQLファイルを用意 - 起動スクリプトからそのSQLを流すように設定
- systemdサービスとして登録
3. SQLファイルの作成
oracleユーザーで、以下のSQLファイルを作成します:
$ vi /home/oracle/scripts/open_pdbs.sql
ALTER PLUGGABLE DATABASE ALL OPEN;
EXIT;
4. 起動スクリプトの作成
$ vi /home/oracle/scripts/dbora_start.sh
#!/bin/bash
source ~/.bash_profile
$ORACLE_HOME/bin/lsnrctl start
$ORACLE_HOME/bin/sqlplus / as sysdba <<EOF
startup
@/home/oracle/scripts/open_pdbs.sql
EOF
停止スクリプト(変更なし)
$ vi /home/oracle/scripts/dbora_stop.sh
#!/bin/bash
source ~/.bash_profile
$ORACLE_HOME/bin/sqlplus / as sysdba <<EOF
shutdown immediate
EOF
$ORACLE_HOME/bin/lsnrctl stop
実行権限の付与
$ chmod +x /home/oracle/scripts/dbora_start.sh
$ chmod +x /home/oracle/scripts/dbora_stop.sh
5. systemdサービスの設定
# vi /etc/systemd/system/dbora.service
[Unit]
Description=Oracle CDB with PDB Auto-Start via SQL
After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
User=oracle
ExecStart=/home/oracle/scripts/dbora_start.sh
ExecStop=/home/oracle/scripts/dbora_stop.sh
[Install]
WantedBy=multi-user.target
登録と有効化
# systemctl daemon-reexec
# systemctl daemon-reload
# systemctl enable dbora.service
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
6. 起動確認
サーバ再起動後、PDBが自動で READ WRITE 状態になっていることを確認します。
$ sqlplus / as sysdba
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
7. テキスト図:処理の流れ
┌────────────┐
│ Linux起動 │
└────┬───────┘
▼
┌────────────────────────────┐
│ systemd が dbora.service 実行 │
└────┬───────────────────────┘
▼
┌───────────────────────────────┐
│ CDB起動 → SQLでPDBをすべてOPEN │
└───────────────────────────────┘
8. この方法のメリット・デメリット
| メリット | デメリット |
|---|---|
SAVE STATE を使わず構成が明確 | CDBが起動してもSQLが実行されないとPDBは閉じたまま |
| スクリプト内で制御が完結する | 起動時に失敗しても自動リカバリされない |
まとめ
SAVE STATE を使わず、SQLファイルで ALTER PLUGGABLE DATABASE ALL OPEN を流す方法でも、すべてのPDBを自動で起動できます。
スクリプトで完全制御したい場合や、起動タイミングを明示したい運用に向いています。
[参考]
3 起動と停止




コメント