忍者ブログ
IT関係の小作人労働の日々の日記です。 最近データベースが好きです。 インフラ構築、DB構築、アプリケーション開発・・・何でも屋です。 何でもできそうで、何にもできない。

【Oracle Cloud Free & DB】第4回:ブラウザから繋いでいるのはCDB?PDB?実機SQLで暴くマルチテナントの裏側と「同居」の仕組み


前回までで、言語設定(NLS)や時刻(タイムゾーン)を「日本仕様」に完全自動化し、ストレスのない検証環境を整えることができました。基礎固めが終わったところで、今回は少しアーキテクチャの深い部分に踏み込んでみましょう。Oracle Databaseといえば「マルチテナント・アーキテクチャ(CDB/PDB)」が標準ですが、私たちが今ブラウザ(データベース・アクション)から触っている環境は、一体どちらに接続しているのでしょうか?実機での検証ログを交えて解説します。

1. 結論:私たちが接続しているのは100%「PaaSのPDB」

結論から言うと、データベース・アクションからログインして操作している領域は、100%「PDB(プラガブル・データベース)」側です。

Oracle CloudのAlways Free枠で構築されるAutonomous Database(ADB)は、ユーザーがインフラの管理(CDBレベルの保守や全体設定)を意識しなくて済むように徹底して隠蔽されています。最初から独立した1つのPDB(アプリケーション用の仮想的なデータベース部屋)として切り出され、提供されているのが特徴です。

2. 【実機検証】SYS_CONTEXTで現在地を暴く

本当にPDBに接続しているのか、データ・ディクショナリではなくセッション情報を保持する「SYS_CONTEXT」関数を叩いて、内部的なコンテナ名とIDを引っ張り出してみましょう。

現在地を確認するSQL
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS CONTAINER_NAME, SYS_CONTEXT('USERENV', 'CON_ID') AS CONTAINER_ID FROM DUAL;

【実行結果(セキュリティのため固有識別子はマスクしています)】
"CONTAINER_NAME","CONTAINER_ID"
"XXXXXXXXXXXXXXX_DB19C","316"

経過時間: 00:00:00.002
1行が選択されました。

注目すべきは、CONTAINER_ID に出力された「316」という非常に大きな数値です。Oracleのマルチテナント仕様では、このIDの数値によって居場所が厳密に定義されています。

  • CON_ID = 1:CDB$ROOT(システム全体・全コンテナを統括する親玉)
  • CON_ID = 2:PDB$SEED(新しいPDBを自動生成するための型枠)
  • CON_ID >= 3:ユーザーが個別に作成した独立運用の PDB

実機ログで「316」という大きな番号が出ているということは、クラウドの巨大な共有基盤(CDB)の中で、自分の環境が「316番目の独立した個室(PDB)」としてきっちり区切られてホストされているという、何よりの証明になります。

3. 図解で見るCDBとPDBの「同居」アーキテクチャ

この関係性を分かりやすくイメージ図にすると、以下のようなマンション構造になっています。クラウド(PaaS)ならではの「同居」の形が視覚的に理解できると思います。

【 Oracle Cloudの巨大なインフラ基盤:CDB(コンテナ・データベース) 】
■ CDB$ROOT (CON_ID: 1) ── Oracleのクラウド管理部隊が統括(ユーザーは立ち入り禁止)
PDB (CON_ID: 3)
世界中の誰かの無料枠
PDB (CON_ID: 4)
また別の誰かの無料枠
★ PDB (CON_ID: 316)
あなた専用の部屋
(いま接続している場所)

このように、親となる巨大なCDBの中に、世界中のユーザーのPDBがマンションの部屋のように並んでいます。私たちがブラウザからログインした瞬間、この「316号室」へ直接ワープして接続しているわけです。

4. アーキテクチャから納得する「PaaSの制限」

この構造が頭に入ると、第2回や第3回で直面した「PaaSならではの制限や不思議な挙動」の理由が、パズルのピースがハマるようにスッキリと納得できます。

① サーバー全体の初期化パラメータを変更できない理由
もし私たちがADMIN権限を使って、CDB全体のパラメータ(`ALTER SYSTEM`)を勝手に書き換えてしまうと、同じCDBマンションに同居している「他のユーザーの部屋(PDB)」にまで設定が波及し、大混乱を引き起こしてしまいます。そのため、クラウド側で厳重にブロックされているのです。

② 前回のログオン・トリガーが安全に動く理由
前回、接続時にタイムゾーンを自動適用させるために AFTER LOGON ON DATABASE というトリガーを仕込みました。「DATABASE(全体)」と書くので他人に迷惑がかからないか一瞬ヒヤッとしますが、PDB環境下においてはこのコマンドは自動的に「自分がいるPDB(316号室)の中だけ」に適用範囲が限定されます。隣の部屋を汚すことなく、安全に自分好みの部屋(JST環境)にカスタマイズできていたわけです。

5. まとめ:ブラックボックスを暴くとクラウドはもっと面白い

一見すると完全にカプセル化されていて中身が見えないクラウド(PaaS)のOracleですが、標準的なSQL関数(SYS_CONTEXT)を一本叩くだけで、その裏側にある精緻なマルチテナントの同居構造が綺麗に見えてきます。インフラの仕組みを正しく把握することこそ、トラブルに強いエンジニアへの第一歩です。

本日のアーキテクチャチェックリスト
1. Autonomous Databaseは最初から「PDB」として切り出されて提供されている。
2. SYS_CONTEXTで「CON_ID」を確認し、3以上の大きな数値が出ればそれがPDB同居の証拠。
3. CDB全体に影響が及ぶ操作は、他ユーザーの保護(マルチテナントの安全)のために制限されている。


自分たちの「現在地」とクラウドの仕組みが完璧に腑に落ちたところで、環境構築の章はいよいよフィナーレです。次回第5回は、もう一つの無料枠の権利をフルに使い、「19c」のインスタンスを実際に追加して、今回作った最新「26ai」環境との本格的な並走比較(機能・挙動の違い)に突入します。新旧Oracleの最大の違いはどこにあるのか?どうぞお楽しみに!

PR
【 Oracle Cloudの巨大なインフラ基盤:CDB(コンテナ・データベース) 】
■ CDB$ROOT (CON_ID: 1) ── Oracleのクラウド管理部隊が統括(ユーザーは立ち入り禁止)
PDB (CON_ID: 3)
世界中の誰かの無料枠
PDB (CON_ID: 4)
また別の誰かの無料枠
★ PDB (CON_ID: 316)
あなた専用の部屋
(いま接続している場所)

このように、親となる巨大なCDBの中に、世界中のユーザーのPDBがマンションの部屋のように並んでいます。私たちがブラウザからログインした瞬間、この「316号室」へ直接ワープして接続しているわけです。

4. アーキテクチャから納得する「PaaSの制限」

この構造が頭に入ると、第2回や第3回で直面した「PaaSならではの制限や不思議な挙動」の理由が、パズルのピースがハマるようにスッキリと納得できます。

① サーバー全体の初期化パラメータを変更できない理由
もし私たちがADMIN権限を使って、CDB全体のパラメータ(`ALTER SYSTEM`)を勝手に書き換えてしまうと、同じCDBマンションに同居している「他のユーザーの部屋(PDB)」にまで設定が波及し、大混乱を引き起こしてしまいます。そのため、クラウド側で厳重にブロックされているのです。

② 前回のログオン・トリガーが安全に動く理由
前回、接続時にタイムゾーンを自動適用させるために AFTER LOGON ON DATABASE というトリガーを仕込みました。「DATABASE(全体)」と書くので他人に迷惑がかからないか一瞬ヒヤッとしますが、PDB環境下においてはこのコマンドは自動的に「自分がいるPDB(316号室)の中だけ」に適用範囲が限定されます。隣の部屋を汚すことなく、安全に自分好みの部屋(JST環境)にカスタマイズできていたわけです。

5. まとめ:ブラックボックスを暴くとクラウドはもっと面白い

一見すると完全にカプセル化されていて中身が見えないクラウド(PaaS)のOracleですが、標準的なSQL関数(SYS_CONTEXT)を一本叩くだけで、その裏側にある精緻なマルチテナントの同居構造が綺麗に見えてきます。インフラの仕組みを正しく把握することこそ、トラブルに強いエンジニアへの第一歩です。

本日のアーキテクチャチェックリスト
1. Autonomous Databaseは最初から「PDB」として切り出されて提供されている。
2. SYS_CONTEXTで「CON_ID」を確認し、3以上の大きな数値が出ればそれがPDB同居の証拠。
3. CDB全体に影響が及ぶ操作は、他ユーザーの保護(マルチテナントの安全)のために制限されている。


自分たちの「現在地」とクラウドの仕組みが完璧に腑に落ちたところで、環境構築の章はいよいよフィナーレです。次回第5回は、もう一つの無料枠の権利をフルに使い、「19c」のインスタンスを実際に追加して、今回作った最新「26ai」環境との本格的な並走比較(機能・挙動の違い)に突入します。新旧Oracleの最大の違いはどこにあるのか?どうぞお楽しみに!

PR
" dc:identifier="http://aieyzumcrgpdbggt.blog.shinobi.jp/Entry/909/" /> -->