忍者ブログ
データベースエンジニアのための実践ブログ。Oracle・PostgreSQL・MySQLなどの環境構築、実行計画の読み方やチューニングといった現場で役立つノウハウ、DB基礎知識までを発信しています。

【Oracle 26ai運用管理】マルチテナント環境の基本!「Oracle AI Database 26ai」の正しい起動・停止とPDB自動起動設定

Oracle 12c以降のマルチテナント・アーキテクチャでは、インスタンスの土台となる親データベース(CDB)と、実際の業務データを格納する子データベース(PDB)の2階層構造を意識して起動・管理する必要がある。

今回は、Oracle AI Database 26ai Free環境を対象に、CDBおよびPDBの起動手順、トラブル時の対処法、そして運用の効率化に欠かせないPDBの自動起動設定(SAVE STATE)についてわかりやすく解説する。


1. はじめに(前提知識と構成)

現在のOracleマルチテナント・アーキテクチャは、親と子の2層構造になっており、起動操作を行う上で以下の2つの領域を意識する。

  • CDB$ROOT(親DB / ルートコンテナ)
    システム全体を統括・管理するための親領域(マンションの管理人室のようなもの)。Oracleを構築するとデフォルトで自動作成され、名前は CDB$ROOT で固定されている。起動などの全体管理は、基本的にこの領域に接続して行う。
  • PDB(子DB / プラガブル・データベース)
    実際に業務データやアプリケーションのデータが格納される領域(マンションの各部屋)。本環境では、FREEPDB1 という名前のPDBが存在する。
【起動の全体フロー】
親DB(CDB$ROOT)を STARTUP する。適切な設定がされている場合、親を起動すると自動的に子DB(FREEPDB1)も起動(OPEN)し、すぐに利用可能な状態になる。

2. 起動手順

Step 1: OS環境変数の設定

Oracleソフトウェアを管理するOSユーザー(通常は oracle)でターミナルにログインし、環境変数を設定する。

# oracleユーザーで作業
su - oracle

# 環境変数の設定(※環境に合わせて変更してください)
export ORACLE_SID=FREE                # Oracle Free版のデフォルトSID
export ORACLE_HOME=/opt/oracle/product/26ai/dbhomeFree # 環境に応じたパス

Step 2: CDB$ROOT(親DB)への接続と起動

システム管理を行う親領域(CDB$ROOT)に最高管理者として接続し、土台となるCDBを起動する。

# 1. SYSDBA(最高権限)で接続
# ※自動的に親である「CDB$ROOT」に接続されます。
sqlplus / as sysdba

# 2. CDBの起動
SQL> STARTUP;

【期待される出力結果】

ORACLEインスタンスが起動しました。

Total System Global Area 1603392928 bytes
Fixed Size                5027232 bytes
Variable Size          436207616 bytes
Database Buffers       1157627904 bytes
Redo Buffers             4530176 bytes
データベースがマウントされました。
データベースがオープンされました。

Step 3: PDB(子DB:FREEPDB1)の起動状態確認

親を起動したことで、子DBも一緒に起動しているか(利用可能か)を確認する。

SQL> SHOW PDBS;

【期待される出力結果】

    CON_ID CON_NAME                           OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                         READ ONLY  NO
         3 FREEPDB1                         READ WRITE NO

FREEPDB1 の OPEN MODE が 「READ WRITE(読み書き可能)」 になっていれば起動完了である。


3. 【トラブルシューティング】もしPDBが起動していなかった場合

何らかの理由で FREEPDB1 の OPEN MODE が MOUNTED(待機状態)になっていた場合は、以下のコマンドで手動起動する。

SQL> ALTER PLUGGABLE DATABASE FREEPDB1 OPEN;

4. 【補足】PDB自動起動(SAVE STATE)の確認・設定・解除

Oracleでは、「CDB起動時にPDBも自動で起動させるかどうか」をPDBごとに記憶(保存)させることができる。実運用では非常に重要な機能となる。

① 自動起動が設定されているか確認する

現在、どのPDBに自動起動が設定されているかは、dba_pdb_saved_states ビューで確認できる。

-- 1. 確認用クエリの実行(SYSDBAで実行)
SQL> SELECT CON_NAME, INSTANCE_NAME, STATE FROM DBA_PDB_SAVED_STATES;

-- 【実行結果の例(自動起動が有効な場合)】
-- CON_NAME   INSTANCE_NAME  STATE
-- ---------- -------------- ----------
-- FREEPDB1   FREE           OPEN

※ CON_NAME に FREEPDB1 が表示され、STATE が OPEN になっていれば自動起動設定済み。行が何も返ってこない場合は未設定である。

② 自動起動を設定する(SAVE STATE)

PDBが起動(READ WRITE)している状態で以下を実行すると、現在の状態が記憶され、次回から親DBの起動と連動して自動起動するようになる。

-- 特定のPDB(FREEPDB1)のみ自動起動を有効化する場合
SQL> ALTER PLUGGABLE DATABASE FREEPDB1 SAVE STATE;

-- すべてのPDBで自動起動を有効化する場合
SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE;

③ 自動起動を解除する(DISCARD STATE)

親DBを起動した際、PDBは自動起動させず MOUNTED(停止待機状態)のままにしておきたい場合は、保存された状態を破棄(解除)する。

-- 特定のPDB(FREEPDB1)の自動起動を解除する場合
SQL> ALTER PLUGGABLE DATABASE FREEPDB1 DISCARD STATE;

-- すべてのPDBの自動起動を解除する場合
SQL> ALTER PLUGGABLE DATABASE ALL DISCARD STATE;
【運用のポイント】
✔ CDB起動(STARTUP)後は必ず SHOW PDBS; で FREEPDB1 の状態をチェックする習慣をつけよう。
✔ サーバー再起動時にPDBが停止したままになるのを防ぐため、構築完了時には ALTER PLUGGABLE DATABASE FREEPDB1 SAVE STATE; を忘れずに実行しておこう。
PR