OS起動時にすべてのPDBをSQLで自動起動させる方法

オラクルデータベースの基本

Oracle 12c以降のCDB構成では、CDBが起動してもPDBは自動では開かれません。
一般的には SAVE STATE を使用して自動起動させますが、明示的にSQLスクリプトで開く方法も有効です。

本記事では、ALTER PLUGGABLE DATABASE ALL OPEN をスクリプトで実行する構成を紹介します。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


1. 前提環境

項目内容
Oracle構成CDB+複数PDB(例:PDB1, PDB2)
OSsystemd対応Linux(例:Oracle Linux 8)
Oracleユーザーoracle
ORACLE_SIDcdb01(CDB名)
.bash_profile設定済(ORACLE_HOME, ORACLE_SID等)

2. 手順概要

  1. Oracle起動後に ALTER PLUGGABLE DATABASE ALL OPEN を実行するSQLファイルを用意
  2. 起動スクリプトからそのSQLを流すように設定
  3. 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 起動と停止

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました