アプリケーション・コンテナについて
アプリケーション・コンテナはオプションのユーザー作成CDBコンポーネントで、1つ以上のアプリケーション・バックエンドのデータおよびメタデータが格納されます。CDBにはゼロ以上のアプリケーション・コンテナが含まれます。
アプリケーション・コンテナ内で、アプリケーションはアプリケーション・ルートに格納される共通データおよびメタデータの名前付けおよびバージョニングされたセットです。このアプリケーション・コンテナのコンテキストでは、「アプリケーション」という用語は「マスター・アプリケーション定義」を意味します。たとえば、表、ビュー、パッケージなどの定義をアプリケーションに含めることができます。
たとえば、1つのアプリケーション・コンテナ内で複数の販売関連PDBを作成し、これらのPDBが一連の共通表および表定義で構成されるアプリケーションを共有することができます。複数のHR関連PDBを、その独自の共通表および表定義とともに別のアプリケーション・コンテナ内で格納できます。
AS APPLICATION CONTAINER
句を使用したCREATE PLUGGABLE DATABASE
文によってアプリケーション・コンテナのアプリケーション・ルートが作成され、これによって暗黙的にアプリケーション・コンテナ自体が作成されます。アプリケーション・コンテナを最初に作成した時点では、PDBは含まれていません。アプリケーションPDBを作成するには、アプリケーション・ルートに接続してCREATE PLUGGABLE DATABASE
文を実行する必要があります。
CREATE PLUGGABLE DATABASE
文で、たとえば、saas_sales_ac
などのコンテナ名(アプリケーション・ルート名と同じ)を指定する必要があります。アプリケーション・コンテナ名は、CDB内と、そのインスタンスが特定のリスナーを介してアクセスされるすべてのCDBのスコープ内で一意にする必要があります。すべてのアプリケーション・コンテナに、アプリケーション・コンテナと同じ名前のデフォルト・サービスがあります。
- アプリケーション・コンテナの目的
アプリケーション・コンテナはある意味で、CDB内のアプリケーション固有CDBとして機能します。アプリケーション・コンテナにはCDB自身のように複数のPDBが含まれ、これらのPDBはメタデータおよびデータを共有できます。 - アプリケーション・ルート
アプリケーション・コンテナには、コンテナ内のアプリケーションPDBの親であるアプリケーション・ルートが1つあります。 - アプリケーションPDB
アプリケーションPDBはアプリケーション・コンテナ内に存在するPDBです。CDB内のPDBはすべて、ゼロまたは1つのアプリケーション・コンテナに存在します。 - アプリケーション・シード
アプリケーション・シードはアプリケーション・コンテナ内のオプションのユーザー作成PDBです。アプリケーション・コンテナにはゼロまたは1つのアプリケーション・シードが含まれます。
親トピック: アプリケーション・コンテナおよびシードの作成と削除
アプリケーション・コンテナの目的
アプリケーション・コンテナはある意味で、CDB内のアプリケーション固有CDBとして機能します。アプリケーション・コンテナにはCDB自身のように複数のPDBが含まれ、これらのPDBはメタデータおよびデータを共有できます。
アプリケーション・ルートによってアプリケーションPDBが、アプリケーション(このコンテキストでは共通メタデータおよびデータの名前付けおよびバージョニングされたセット)を共有できます。一般的なアプリケーションではアプリケーション共通ユーザー、メタデータリンク共通オブジェクト、およびデータリンク共通オブジェクトがインストールされます。
- アプリケーション・コンテナの主な利点
アプリケーション・コンテナにより、個々のアプリケーションを別々のPDBに格納することの利点が提供されます。 - アプリケーション・コンテナのユースケース: SaaS
SaaSデプロイメントでは、個々が別の顧客用で、メタデータおよびデータを共有する複数のアプリケーションPDBを使用できます。 - アプリケーション・コンテナのユースケース: 論理データ・ウェアハウス
顧客は複数のアプリケーションPDBを使用してデータの主権の問題に対応できます。
親トピック: アプリケーション・コンテナについて
アプリケーション・コンテナの主な利点
アプリケーション・コンテナにより、個々のアプリケーションを別々のPDBに格納することの利点が提供されます。
-
アプリケーション・ルートは、すべてのアプリケーションPDBが共有できるメタデータおよびデータを格納します。
たとえば、すべてのアプリケーションPDBは中央にある1つの表(デフォルトのアプリケーション・ロールをリストする表など)のデータを共有できます。また、すべてのPDBはPDB固有行の追加先である表定義を共有できます。
-
マスター・アプリケーション定義は、各PDBで個別のコピーを保持するのではなく、アプリケーション・ルートで保持されます。
アプリケーション・ルートでアプリケーションをアップグレードすると、その変更はすべてのアプリケーションPDBに自動的に伝播されます。アプリケーション・バックエンドには、データリンク共通オブジェクト
app_roles
が含まれている可能性があります。これは、admin
、manager
、sales_rep
などのデフォルト・ロールをリストする表です。アプリケーションPDBに接続したユーザーは、この表を問い合せることができます。 -
アプリケーション・コンテナには、アプリケーション・シード、アプリケーションPDBおよびプロキシPDB (他のCDB内のPDBを参照する)を含めることができます。
-
新規のアプリケーションPDBをアプリケーション・シードから迅速に作成できます。
-
アプリケーション・コンテナですべてのPDBについてレポートするビューを問合せできます。
-
アプリケーション・ルートへの接続中に、
CONTAINERS
関数を使用して、複数のPDB内のオブジェクトに対してDMLを実行できます。たとえば、あらゆるアプリケーションPDBに
products
表が存在する場合、アプリケーション・ルートに接続して、単一のSELECT
文を使用してすべてのアプリケーションPDB内の製品を問合せできます。 -
PDBをアプリケーション・ルートから切断してから、新しいOracle Databaseリリースのアプリケーション・ルートにそのPDBを接続できます。したがって、PDBはOracle Databaseのアップグレードに役立ちます。
親トピック: アプリケーション・コンテナの目的
アプリケーション・コンテナのユースケース: SaaS
SaaSデプロイメントでは、個々が別の顧客用で、メタデータおよびデータを共有する複数のアプリケーションPDBを使用できます。
純粋なSaaS環境では、マスター・アプリケーション定義はアプリケーション・ルート内に存在しますが、顧客固有のデータはその固有のアプリケーションPDB内に存在します。たとえば、sales_app
はアプリケーション・ルート内のアプリケーション・モデルです。cust1_pdb
というアプリケーションPDBには顧客1用の販売データのみが含まれる一方、cust2_pdb
というアプリケーションPDBには顧客2用の販売データのみが含まれます。接続、切断、クローニングおよびその他のPDBレベルの操作を、個々の顧客PDBで使用できます。
純粋なSaas構成には次のメリットがあります。
-
パフォーマンス
-
セキュリティ
-
複数の顧客のサポート
各顧客のデータは、その固有のコンテナ内に存在しますが、多くの顧客をまとめて管理できるように統合されます。このモデルにより、多くの要素を1つにまとめて管理する規模の経済性が、DBAのみでなくアプリケーション管理者にも適用されます。
親トピック: アプリケーション・コンテナの目的
アプリケーション・コンテナのユースケース: 論理データ・ウェアハウス
顧客は複数のアプリケーションPDBを使用してデータの主権の問題に対応できます。
サンプル・ユースケースでは、ある会社が各会計四半期に固有のデータを別個のPDBに配置しています。たとえば、sales_ac
というアプリケーション・コンテナにq1_2016_pdb
、q2_2016_pdb
、q3_2016_pdb
およびq4_2016_pdb
が含まれています。個々のトランザクションは、関連する四半期に対応するPDB内で定義します。1年間の業績を集計するレポートを生成するには、CONTAINERS()
句を使用して4つのPDB間で集計します。
この論理ウェアハウス設計の利点は次のとおりです。
-
1つのPDBに固有のデータに対するETLが他のPDBに影響しません。
-
実行計画が、実際のデータ分布に基づいているため、より効率的です。
親トピック: アプリケーション・コンテナの目的
アプリケーション・ルート
アプリケーション・コンテナには、コンテナ内のアプリケーションPDBの親であるアプリケーション・ルートが1つだけあります。
アプリケーション・ルートになるためのプロパティは作成時に確立され、変更することはできません。アプリケーション・ルートが属すコンテナはCDBルートのみです。アプリケーション・ルートはある面ではCDBルートに類似し、別の面ではPDBに類似しています。
-
CDBルートと同様に、アプリケーション・ルートは接続されているPDBの親コンテナとして機能します。アプリケーション・ルートへの接続中に、共通ユーザーおよび権限の管理、アプリケーションPDBの作成、コンテナの切替え、およびアプリケーション・コンテナのすべてのPDBに適用されるDDLの発行などができます。
-
PDBと同様に、
CREATE PLUGGABLE DATABASE
文でアプリケーション・ルートを作成し、それをALTER PLUGGABLE DATABASE
で変更し、その可用性をSTARTUP
およびSHUTDOWN
で変更することができます。アプリケーション・ルートの接続、切断および削除にはDDLを使用できます。アプリケーション・ルートには固有のサービス名があり、ユーザーはPDBに接続するのと同じ方法でアプリケーション・ルートに接続できます。
アプリケーション・ルートは、アプリケーション共通オブジェクトと呼ばれるユーザー作成共通オブジェクトを格納できるため、CDBルートおよび標準PDBの両方と異なります。アプリケーション共通オブジェクトはアプリケーション・ルートに接続されたアプリケーションPDBにとってアクセス可能です。アプリケーション共通オブジェクトはCDBルート、他のアプリケーション・ルート、またはアプリケーション・ルートに属さないPDBには表示されません。
例14-1 アプリケーション・ルートの作成
この例では、管理共通ユーザーc##system
としてCDBルートにログインします。saas_sales_ac
というアプリケーション・コンテナを作成し、コンテナと同じ名前を持つアプリケーション・ルートをオープンします。
-- Create the application container called saas_sales_ac
CREATE PLUGGABLE DATABASE saas_sales_ac AS APPLICATION CONTAINER
ADMIN USER saas_sales_ac_adm IDENTIFIED BY manager;
-- Open the application root
ALTER PLUGGABLE DATABASE saas_sales_ac OPEN;
現在のコンテナをsaas_sales_ac
に設定し、このコンテナがアプリケーション・ルートであることを確認します。
-- Set the current container to saas_sales_ac
ALTER SESSION SET CONTAINER = saas_sales_ac;
COL NAME FORMAT a15
COL ROOT FORMAT a4
SELECT CON_ID, NAME, APPLICATION_ROOT AS ROOT,
APPLICATION_PDB AS PDB,
FROM V$CONTAINERS;
CON_ID NAME ROOT PDB
---------- --------------- ---- ---
3 SAAS_SALES_AC YES NO
親トピック: アプリケーション・コンテナについて
アプリケーションPDB
アプリケーションPDBはアプリケーション・コンテナ内に存在するPDBです。CDB内のPDBはすべて、ゼロまたは1つのアプリケーション・コンテナに存在します。
たとえば、saas_sales_ac
アプリケーション・コンテナで複数の顧客がサポートされ、個々の顧客アプリケーションがそのデータを別々のPDBに格納する場合があります。cust1_sales_pdb
およびcust2_sales_pdb
のアプリケーションPDBがsaas_sales_ac
に存在する場合、これらは他のアプリケーション・コンテナには属していません(ただし、PDBは必然的にCDBルートにも属します)。
アプリケーション・ルートへの接続中にCREATE PLUGGABLE DATABASE
を実行して、アプリケーションPDBを作成します。シードからアプリケーションPDBを作成するか、PDBをクローニングするか、または切断されたPDBを接続することができます。CDBルートに接続しているPDBと同様に、アプリケーションPDBをクローニング、切断または削除できます。ただし、アプリケーションPDBは常にアプリケーション・ルートに属す必要があります。
親トピック: アプリケーション・コンテナについて
アプリケーション・シード
アプリケーション・シードはアプリケーション・コンテナ内のオプションのユーザー作成PDBです。アプリケーション・コンテナにはゼロまたは1つのアプリケーション・シードが含まれます。
アプリケーション・シードを使用すると、アプリケーションPDBを簡単に作成できます。これはアプリケーション・コンテナ内で、PDB$SEED
がCDB内で果たす役割と同じ役割を果たします。
アプリケーション・シード名は常にapplication_container_name$SEED
となり、application_container_name
はアプリケーション・コンテナの名前を表します。たとえば、CREATE PDB ... AS SEED
文を使用して、saas_sales_ac
アプリケーション・コンテナにsaas_sales_ac$SEED
を作成します。
親トピック: アプリケーション・コンテナについて