連載
» 2013年09月13日 19時00分 公開

データベース統合の新たな手法「マルチテナント・アーキテクチャ」ユーザー目線でチェック! Oracle Database 12cの知りたいところ(2)(2/3 ページ)

[青野友香,株式会社コーソル]

これだけは押さえましょう! マルチテナント・アーキテクチャのポイント

 マルチテナント・アーキテクチャで構成されたデータベースには、従来のOracleデータベースにはなかった、マルチテナント・アーキテクチャ特有の概念がいくつかあります。これらのうち、ユーザーが最低限押さえておくべきポイントについて説明します。

CDB内にある3つのコンテナ

 CDBはCDB$ROOT、PDB$SEED、PDBという3種類のコンテナから構成されています。コンテナはマルチテナント・アーキテクチャに含まれるデータベースにおおむね相当すると考えてください。

CDB$ROOT(ルート)

  • CDBの基盤となるコンテナです。1つのCDBに対して必ず1つ存在します
  • CDB内の全コンテナで共有するオブジェクトやメタデータが格納されます
  • オブジェクトの追加や削除はできません

PDB$SEED(シード)

  • PDBを新規に作成するときのひな形(テンプレート)として機能します。CDB作成時に、1つだけ作成されます
  • 読み取り専用で、オブジェクトの追加や変更はできません

PDB(プラガブル・データベース)

  • マルチテナント・アーキテクチャに統合するデータベースに相当します
  • PDBごとにスキーマや表領域の独立した名前空間を持ち、同一のCDB内の複数のPDBで同じ名称のスキーマや表領域を使用できます
  • 1つのCDBに対して、最大252個のPDBを作成できます
  • 各PDBは分離され、アプリケーションの分離性やセキュリティが担保されます
  • CDBからPDBを取り外したり(Unplug)、取り外したPDBを別のCDBまたは以前と同じCDBに取り付ける(Plug)ことができます

 CDBの基盤となるコンテナはCDB$ROOTです。CDBに対してローカル接続すると自動的にCDB$ROOTに接続されます。

 なお、直接PDBにローカル接続はできません。PDBへローカル接続したい場合は、CDBにローカル接続した後、「ALTER SESSION SET CONTAINER...」コマンドを使用して、接続先のコンテナを切り替えます*


*リモート接続における接続先コンテナの指定方法は後述します。


図1 マルチテナント・アーキテクチャ構成図

コンテナ間で共有されるもの、されないもの

 マルチテナント・アーキテクチャでは、1つのインスタンス内に複数のコンテナが存在する構成になっています。すなわち、インスタンスが提供するメモリやバックグラウンドプロセスなどのリソースを複数のコンテナで共有する形になります。また、データベースの構成ファイルについてもREDO、UNDOなどの一部については、複数のコンテナで共有する形になります。

 従来のインスタンス構成と同様に、SGAやPGAなどのインスタンスが使用するメモリのサイズは初期化パラメータで設定します。インスタンスが割り当てたメモリは各コンテナで共有して使用されます。特定のPDBに多くのメモリを割り当てるといった設定はできません。

 バックグラウンドプロセスについても、初期起動数、最大起動数や動作特性などは従来のインスタンス構成と同様に初期化パラメータで設定し、各コンテナで共有して使用されます。

 次に、データベースの構成ファイルについてですが、SYSTEM、SYSAUX、TEMP、USERS表領域は各コンテナが固有の表領域を持ちます。すなわち、1つのPDBを含むCDBには、CDB$ROOT、PDB$SEED、PDBに含まれる3つのSYSTEM表領域に存在する形になります。なお、SYSTEM表領域のサイズを確認すると、PDBのSYSTEM表領域はCDB$ROOTのSYSTEM表領域よりもサイズが小さくなっていることが分かります。これはデータベース共通のデータがCDB$ROOTのSYSTEM表領域にのみ格納されており、PDBのSYSTEM表領域の領域を占有していないことからきていると思われます。

 一方で、オンラインREDOログファイル、UNDO表領域はCDB$ROOTの構成要素と位置付けられており、PDBにはオンラインREDOログファイル、UNDO表領域が割り当てられません。

図2 メモリ、メタデータの共有図

2つのユーザータイプ

 マルチテナント・アーキテクチャではローカル・ユーザーと共通ユーザーの2つのユーザータイプが存在します。

ローカル・ユーザー

  • 特定のPDBにのみに存在するユーザーです
  • アプリケーション固有のユーザーは一般にローカル・ユーザーとします

共通ユーザー

  • CDB$ROOTとCDB内の全PDBで共通に使用されるユーザーです
  • 起動停止、Plug、Unplugといった操作や、CDB$ROOTに格納されているオブジェクトに対する操作など、データベース全体の操作は、共通ユーザーがCDBに接続して実施します
  • デフォルトでSYS、SYSTEMユーザーが共通ユーザーとして作成済みです
  • ユーザーが独自に共通ユーザーを作成する場合、ユーザー名に接頭辞(C##、c##)を付ける必要があります。接頭辞(C##、c##)を付けずに共通ユーザーを作成しようとすると、エラー「ORA-65096: 共通ユーザーまたはロール名が無効です」が発生して作成できません

 それぞれのユーザーに割り当てる権限を細かく管理したい場合は、ユーザーが独自に共通ユーザーを作成し、適宜適切な権限を割り当てるような使用形態が想定されます。逆に、特に権限を細かく管理する必要がなければ、デフォルトで作成済みの共通ユーザー、SYS、SYSTEMを使用して、特に共通ユーザーを作成しないような形になるでしょう。

CDBビュー

 Oracle Database 12c R1から、「CDB_」で始まるデータディクショナリ・ビューが追加されました。従来の「DBA_」ディクショナリ・ビューでは、接続しているコンテナの情報のみが確認できますが、「CDB_」ディクショナリ・ビューでは、CDB内にある各コンテナの情報をまとめて確認きます。ただし、以下の点に注意してください。

  • OPENしていないPDBの情報は表示されません
  • PDBに接続して「CDB_」ディクショナリ・ビューを参照した場合は、「DBA_」ディクショナリ・ビューと同様に接続しているコンテナの情報のみしか確認できません

 次に記載するコマンド結果*は、各コンテナの表領域名を確認するために、CDBからCDB_TABLESPACESビューを参照したものです。

SQL> SHOW PDBS
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
         4 PDB2                           READ ONLY  NO
         5 PDB3                           MOUNTED           <== OPENしていない
SQL> SELECT CON_ID,TABLESPACE_NAME FROM CDB_TABLESPACES ORDER BY 1,2;
    CON_ID TABLESPACE_NAME
---------- ------------------------------
         1 SYSAUX
         1 SYSTEM
         1 TEMP
         1 UNDOTBS1
         1 USERS
         2 SYSAUX
         2 SYSTEM
         2 TEMP
         3 SYSAUX
         3 SYSTEM
         3 TEMP
         3 USERS
         4 SYSAUX
         4 SYSTEM
         4 TEMP
         4 USERS
16行が選択されました。

* CON_IDは各PDBに割り当てられる一意の値です。CON_ID 1はCDB$ROOT、CON_ID 2はPDB$SEEDと値が固定され、作成されたPDBの順に3以降の値が割り当てられます。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。