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

【Oracle 26ai/23ai】11gからのステップアップ!Oracleマルチテナント(CDB/PDB)完全ガイド

Oracle Database 12c以降から導入され、現代のOracle環境(23ai/26aiなど)における標準アーキテクチャとなった「マルチテナント(CDB/PDB)」。
従来の非マルチテナント(非CDB)環境に慣れ親しんだエンジニアにとって、CDBとPDBの関係性や運用方法の違いは最初に押さえておきたい重要ポイントである。

今回は、マルチテナントアーキテクチャの基本概念から接続方法、バックアップ、リスナー、リソース制御までの全体像をわかりやすく整理した。


1. CDBとPDBの基本概念

Oracleのマルチテナント構造は、よく「分譲マンション」に例えると構造を掴みやすくなる。

  • CDB (Container Database) = マンションの建物・管理室・共有設備
    メモリ(SGA/PGA)やバックグラウンドプロセスなどの共通リソースを保持し、システム全体を管理・監視する「親データベース」。
  • PDB (Pluggable Database) = マンションの各部屋(専有スペース)
    業務データやテーブルを個別に保持する独立した「子データベース」。お互いの PDB は完全に分離されている。

CDB と PDB の役割比較

比較項目CDB (Container Database)PDB (Pluggable Database)
役割 システム全体のリソース管理・共通基盤 アプリケーションデータの格納・実行
主な利用者 データベース管理者(DBA) アプリケーション開発者・一般ユーザー
接続用途 DB全体の保守・監視・バックアップ Webアプリや外部ツールからのデータ操作

2. アプリケーションからの接続

Java、Python、あるいは DBeaver などの外部開発ツールから接続する場合、原則として「PDB へ接続」することが基本となる。

【接続先の指定例】
・業務アプリ利用:localhost:1521/FREEPDB1 (PDBのサービス名)
・全体管理作業:localhost:1521/FREE (CDBのサービス名)

環境の隔離:
1つの CDB 上に開発用 PDB(DEV_PDB)と検証用 PDB(TEST_PDB)を独立して同居させることが可能。

3. バックアップと運用の単位

マルチテナント環境では、目的に応じてバックアップの粒度を柔軟に選択できる。

  • CDB単位(全体物理バックアップ)
    RMAN を使用し、全 PDB を含めた CDB 全体を一括バックアップ。サーバー全体の障害対策やインフラ移行に適している。
  • PDB単位(個別物理リカバリ・複製)
    特定の PDB のみを停止・バックアップ・復元。稼働中の他 PDB に影響を与えずに、PDB の複製(Clone)や別 CDB への移植(Plug/Unplug)が可能。
  • 論理バックアップ
    expdp / impdp を使い、特定の PDB やスキーマ単位でデータをダンプファイルとして抽出する。

4. リスナーとの対応関係

リスナーは CDB(サーバー・インスタンス)単位で 1 つ存在 する。
マンションで言えば「エントランスの総合受付(コンシェルジュ)」である。各 PDB ごとに個別リスナーが存在するわけではなく、1 つのリスナーがポート 1521 への通信を一括受領する。

[アプリ / クライアント] ──(Port 1521)──> [ リスナー (受付) ]
                                              │
                    ┌─────────────────────────┴─────────────────────────┐
                    ▼ (サービス名: FREE)                                 ▼ (サービス名: FREEPDB1)
             ┌──────────────┐                                    ┌──────────────┐
             │  CDB (FREE)  │                                    │ PDB(FREEPDB1)│
             └──────────────┘                                    └──────────────┘

クライアントから渡された「サービス名」をリスナーが判定し、該当する CDB や PDB へルーティングする。PDB を追加した場合も、DB が自動でサービス名をリスナーへ登録するため、リスナーの再設定は不要となっている。


5. CDBによる一元リソース制御

各 PDB への CPU、メモリ、I/O、ストレージなどのリソース割り当ては、親である CDB が 一元管理 する。
マンションの管理組合(CDB)が各部屋(PDB)の使用上限を決める仕組みであり、主に以下の方法で制御を行う。

  • CPU / I/O 制御(CDBリソース・マネージャ)
    PDB ごとに CPU の最低保証割合(Shares)や最大使用上限(Utilization Limit)を設定できる。
  • メモリ・ストレージ制御
    PDB ごとに初期化パラメータで SGA/PGA の利用限度額を指定するほか、PDB の最大ディスク容量(MAX_SIZE)を設定可能。

この設定により、特定の PDB で重い処理が発生した際にも他の PDB が巻き添えで低速化する「ノイジー・ネイバー(うるさい隣人)問題」を効果的に防止することができる。

【11g経験者が押さえるべきマルチテナントの勘所】
✔ 接続時は従来のSID指定だけでなく、PDBの「サービス名(例: FREEPDB1)」を指定してルーティングする。
✔ CDB全体の管理(バックアップやインスタンス起動)と、PDB個別の操作(スキーマ・データ操作)を明確に意識する。
✔ 複数テナント集約時のリソース競合は「CDBリソース・マネージャ」でスマートに制御する。
PR