17 アプリケーション・コンテナの管理

アプリケーション・ルートとアプリケーションPDBを含むアプリケーション・コンテナを管理できます。アプリケーション・コンテナにインストールされているアプリケーションも管理できます。

ノート:

この章のタスクは、SQL*PlusまたはOracle SQL Developerを使用して実行できます。

この章のトピックは、次のとおりです:

アプリケーション・コンテナの管理について

アプリケーション・コンテナの管理の一部の側面はCDBルートおよびCDB全体の管理に似ていますが、その他の側面はPDBの管理に似ています。

アプリケーション・コンテナの管理は、アプリケーション・ルートとアプリケーション・ルートに接続されるアプリケーションPDBの両方を管理できるため、CDBの管理と似ています。ただし、アプリケーション・コンテナの管理は、アプリケーション・コンテナに対する変更が他のアプリケーション・コンテナやCDB内のPDBに影響しないため、PDBの管理にも似ています。

次の表では、CDBまたはCDBルートを管理する管理タスクに似たアプリケーション・コンテナの管理タスクについて説明します。

表17-1 CDBの管理に似たアプリケーション・コンテナ管理タスク

管理タスク 説明 詳細情報

アプリケーション共通ユーザーおよび共通して付与される権限の構成

アプリケーション共通ユーザーおよび権限は、CDBルートの共通ユーザーおよび共通して付与される権限に似ていますが、アプリケーション・コンテナでは、共通ユーザーおよび共通して付与される権限は、アプリケーション・ルート、アプリケーション・ルートに属するアプリケーションPDB、アプリケーション・ルートに属するオプションのアプリケーション・シードなど、アプリケーション・コンテナのコンテナ内にのみ存在します。

「CDBの共通ユーザーおよびローカル・ユーザーの概要」

アプリケーション・コンテナの作成

現在のコンテナがCDBルートである共通ユーザーは、CREATE PLUGGABLE DATABASE文にAS APPLICATION CONTAINER句を指定することでCDBルートに接続するアプリケーション・コンテナを作成できます。データベース・ファイルは、Oracle Managed Filesであることが必要です。

「アプリケーション・コンテナの作成」

アプリケーションPDBの作成

現在のコンテナがアプリケーション・ルートである共通ユーザーは、アプリケーション・ルートに接続されるアプリケーションPDBを作成できます。

「PDBおよびアプリケーション・コンテナの作成および削除」

コンテナへの切替え

適切な権限を持つユーザーは、アプリケーション・ルート、アプリケーション・ルートに属するアプリケーションPDB、アプリケーション・ルートに属するオプションのアプリケーション・シードなど、アプリケーション・コンテナ内のコンテナ間を切り替えることができます。

「ALTER SESSION文を使用したコンテナへの切替え」

ALTER SYSTEM SET文の発行

ALTER SYSTEM SET文では、アプリケーション・コンテナ内の1つ以上のコンテナの初期化パラメータを動的に設定できます。

「ALTER SYSTEMを使用したCDBの変更」

データ定義言語(DDL)文の発行

アプリケーション・コンテナでは、DDL文をアプリケーション・コンテナ内のすべてのコンテナに適用できる場合も、現在のコンテナにのみ適用できる場合もあります。

「DDL文でのアプリケーション共通オブジェクトの変更」

次の表では、PDBを管理する管理タスクに似たアプリケーション・コンテナの管理タスクについて説明します。

表17-2 PDBの管理に似たアプリケーション・コンテナ管理タスク

管理タスク 説明 詳細情報

アプリケーション・ルートへの接続

アプリケーション・ルートには固有のサービス名があり、ユーザーはPDBに接続するのと同じ方法でアプリケーション・ルートに接続できます。同様に、各アプリケーションPDBには固有のサービス名があり、アプリケーション・シードには固有のサービス名があります。

「CDB内のコンテナへのアクセス」

ALTER PLUGGABLE DATABASE文の発行

ALTER PLUGGABLE DATABASE文では、PDBを変更するのと同じ方法でアプリケーション・ルート、アプリケーションPDBおよびアプリケーション・シードを変更できます。たとえば、管理者はALTER PLUGGABLE DATABASE文でアプリケーション・ルートをオープンまたはクローズできます。

「CDBルートへの接続時のコンテナの変更」

「データベース・レベルでのPDBの変更」

SQL*PlusのSTARTUPおよびSHUTDOWNコマンドの発行

SQL*PlusのSTARTUPおよびSHUTDOWNコマンドは、PDBを操作するのと同じ方法でアプリケーション・ルート、アプリケーションPDBおよびアプリケーション・シードを操作します。

「1つ以上のPDBのオープン・モードの変更」

ALTER SYSTEM文の発行

ALTER SYSTEM文は、PDBを操作するのと同じ方法でアプリケーション・ルート、アプリケーションPDBおよびアプリケーション・シードを操作します。

「ALTER SYSTEMを使用したCDBの変更」

「システム・レベルでのPDBの変更」

表領域の管理

管理者は、アプリケーション・ルートおよびアプリケーションPDBの表領域を作成、変更および削除できます。各コンテナには固有の表領域があります。

「CDB内表領域の管理について」

データファイルおよび一時ファイルの管理

管理者は、アプリケーション・ルートおよびアプリケーションPDBのデータファイルおよび一時ファイルを作成、変更および削除できます。各コンテナには固有のファイルがあります。

データファイルおよび一時ファイルの管理の詳細は、『Oracle Database管理者ガイド』を参照してください

スキーマ・オブジェクトの管理

PDBで行うのと同じ方法で、アプリケーション・ルートおよび各アプリケーションPDB内のスキーマ・オブジェクトを作成、変更および削除できます。特定のアプリケーション・ルートまたはアプリケーションPDBで起動するトリガーを作成することもできます。

ただし、アプリケーション・コンテナではアプリケーション共通オブジェクトがサポートされ、アプリケーション・コンテナ内のコンテナ間で共有できます。アプリケーション共通オブジェクトはPDBに作成できません。

アプリケーション共通オブジェクトの管理

この項では、次の項目について説明します。

アプリケーション・ルートの変更について

ALTER DATABASE文でアプリケーション・ルートを変更できます。ALTER PLUGGABLE DATABASE文では、アプリケーションPDBのオープン・モードを変更できます。

次の表に、アプリケーション・ルートで発行されるALTER DATABASEおよびALTER PLUGGABLE DATABASE文の句によって変更されるコンテナを示します。表には、アプリケーション・ルートで許可されない文もリストしています。

ノート:

現在のコンテナがアプリケーション・ルートであるときに発行された文は、CDBルート、または現在のアプリケーション・ルートに属していないPDBには影響しません。

表17-3 アプリケーション・ルートのコンテナを変更する文

アプリケーション・ルートのみの変更 1つ以上のアプリケーションPDBの変更 アプリケーション・ルートで発行できない

現在のコンテナがアプリケーション・ルートであるアプリケーション共通ユーザーとして接続した場合、次の句を含むALTER DATABASE文を使用すると、アプリケーション・ルートのみが変更されます。

次の句を含むALTER DATABASE文を使用すると、アプリケーション・ルートが変更され、アプリケーションPDBにデフォルト値が設定されます。

これらの句を使用すると、特定のアプリケーションPDBにデフォルト以外の値を設定できます。

現在のコンテナがアプリケーション・ルートであるアプリケーション共通ユーザーとして接続した場合、次の句を含むALTER PLUGGABLE DATABASE文を使用すると、1つ以上のアプリケーションPDBのオープン・モードを変更できます。

現在のコンテナがアプリケーションPDBである場合、この句を含むALTER PLUGGABLE DATABASE文を使用すると、現在のアプリケーションPDBのオープン・モードを変更できます。

現在のコンテナがアプリケーション・ルートであるアプリケーション共通ユーザーとして接続した場合、次の句を含むALTER PLUGGABLE DATABASE文を使用すると、CDBの再起動時にアプリケーションPDBのオープン・モードを保持することも破棄することもできます。

現在のコンテナがアプリケーション・ルートであるアプリケーション共通ユーザーとして接続した場合、次の句を含むALTER DATABASE文は使用できません。

アプリケーション・コンテナ内のアプリケーションの管理

アプリケーション・コンテナ内にアプリケーションをインストール、アップグレードまたはパッチ適用します。

アプリケーション・コンテナからアプリケーションをアンインストールすることもできます。アプリケーション・ルートでこれらの操作を実行します。アプリケーションPDBがアプリケーション・ルート内のアプリケーションと同期するときに、アプリケーション・コンテナによってアプリケーションの変更がアプリケーションPDBに伝播されます。

この項では、次の項目について説明します。

アプリケーション管理について

アプリケーション・コンテナでは、アプリケーションは名前付きのバージョン管理されたアプリケーション・メタデータおよび共通データのセットです。アプリケーションはアプリケーション・ルートに格納されます。

このコンテキストでは、"アプリケーション"という用語は"アプリケーション・バックエンド"を意味します。アプリケーション共通オブジェクトには、ユーザー・アカウント、表、PL/SQLパッケージなどが含まれます。アプリケーションは、アプリケーション・ルートに属するアプリケーションPDBと共有できます。アプリケーション変更を実行した場合、アプリケーションPDBはアプリケーション・ルート内のアプリケーションと同期できます。

この項では、次の項目について説明します。

i

アプリケーション・メンテナンスの基本的なステップ

アプリケーション・ルート内にアプリケーションをインストール、アップグレードおよびパッチ適用できます。

ALTER PLUGGABLE DATABASE ... BEGIN文を発行して操作を開始し、ALTER PLUGGABLE DATABASE ... END文を発行して操作を終了する必要があります。これらの文は、同じユーザー・セッションまたは別のユーザー・セッションで発行できます。

次に、アプリケーション・コンテナ内のアプリケーションを作成およびメンテナンスするための標準的なプロセスを示します。

  1. アプリケーション・コンテナを作成します。

  2. ALTER PLUGGABLE DATABASE ... BEGIN INSTALLを使用してアプリケーション・ルートにアプリケーションをインストールします。

    このステップには、アプリケーション・データ・モデルの作成と、アプリケーション共通ユーザーおよびアプリケーション共通オブジェクトの構成が含まれます。

    ノート:

    SQL*Loaderは、アプリケーションのインストール、アップグレードおよびパッチ適用の操作中に表に一括挿入することがサポートされる唯一のユーティリティです。

  3. アプリケーション・ルートにアプリケーションPDBを作成します。

  4. アプリケーションをインストールする必要のある各アプリケーションPDBをアプリケーション・ルートと同期します。使用する文はALTER PLUGGABLE DATABASE APPLICATION ... SYNCです。

  5. 各アプリケーションPDBのデータをロードします。

  6. アプリケーションをメンテナンスします。ALTER PLUGGABLE DATABASE ... BEGIN UPGRADEを使用してアップグレードし、ALTER PLUGGABLE DATABASE ... BEGIN PATCHを使用してパッチ適用します。

  7. アップグレードとパッチから変更を適用する必要のあるアプリケーションPDBを同期します。

  8. 必要な場合に新規アプリケーションPDBを追加します。

  9. 必要に応じて、ALTER PLUGGABLE DATABASE ... BEGIN UNINSTALLを使用してアプリケーションをアンインストールします。

関連項目:

アプリケーションのバージョン

アプリケーション・コンテナは、アプリケーションのバージョンとアプリケーションのパッチも管理します。

アプリケーション・コンテナは、次のようにバージョンを管理します。

  • アプリケーションをインストールする場合は、アプリケーション・バージョン番号を指定する必要があります。

  • アプリケーションをアップグレードする場合は、古いアプリケーション・バージョン番号と新しいアプリケーション・バージョン番号を指定する必要があります。

  • アプリケーションにパッチを適用する場合は、パッチの最小アプリケーション・バージョン番号とパッチ番号を指定する必要があります。

アプリケーションが進化するときに、アプリケーション・コンテナでは適用するすべてのバージョンとパッチ変更が保持されます。

異なるアプリケーションPDBが異なるアプリケーション・バージョンを使用するように、アプリケーション・コンテナを構成することもできます。たとえば、様々な顧客にアプリケーションを提供し、各顧客が独自のアプリケーションPDBを持つ場合、一部の顧客がアプリケーションのアップグレードを待つ時間が長くなることがあります。この場合、一部のアプリケーションPDBは最新バージョンのアプリケーションを使用できますが、他のアプリケーションPDBは古いバージョンのアプリケーションを使用できます。

アプリケーション・モジュール名

アプリケーション・モジュール名は、DBMS_APPLICATION_INFO.SET_MODULEプロシージャによって設定されるか、それに相当するOCI属性の設定に従って設定されます。

アプリケーション・メンテナンスの際には、データベースで他のアクティビティが発生している可能性があるため、モジュール名が必要です。たとえば、バックグラウンドプロセスによって発行された文はアプリケーション取得表で取得できません。また、他のユーザーがアプリケーションに関係ない文を実行している可能性もあります。モジュール名のチェックによって、取得される文を取得されない文から区別できます。APPLICATION BEGINが発行されたセッションとモジュール名が一致するセッションのみが取得対象とみなされます。

一部の句(SHARING句など)は、ALTER PLUGGABLE DATABASE ... BEGIN文とALTER PLUGGABLE DATABASE ... END文の間で発行された場合にのみ有効です。これらの句に関してセッションのモジュール名が一致しない場合、そのセッションはBEGIN文とEND文の間に含められないため、その句を含む文はORA-65021などのエラーで失敗します。

モジュール名が一致しない最も一般的な原因は、デフォルトのモジュール名です。たとえば、SQL*Plusではデータベースへの接続時にデフォルトのモジュール名が設定されます。SYSDBAユーザーとして接続したときに1つのデフォルト・モジュール名(たとえば、sqlplus@host1 (TNS V1-V3))が生成されますが、非SYSDBAユーザーとして接続したときは別のデフォルト・モジュール名(たとえば、SQL*Plus)が生成されます。SYSDBAユーザーと非SYSDBAユーザーの両方がメンテナンスを実行する場合は、SQL*Plusのデフォルト設定を利用せずに、各セッションで明示的にモジュール名を同じ値に設定する必要があります。

例17-1 アプリケーション・モジュール名のチェック

この例は、接続したユーザーにSYSDBA権限があるかどうかによってモジュール名が変わることを示しています。

SQL> CONNECT / AS SYSDBA
Connected.

SQL> select module from v$session where audsid = SYS_CONTEXT('USERENV','sessionid'); 

MODULE
----------------------------------------------------------------
sqlplus@host1 (TNS V1-V3)

SQL> CONNECT dba1
Password: *************
Connected.

SQL> select module from v$session where audsid = SYS_CONTEXT('USERENV','sessionid'); 

MODULE
----------------------------------------------------------------
SQL*Plus

関連項目:

アプリケーション・モジュール名の設定方法を学習するには、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

アプリケーション・コンテナヘのアプリケーションのインストール

アプリケーション・コンテナにアプリケーションにインストールできます。

この項では、次の項目について説明します。

アプリケーション・コンテナ内のアプリケーションのインストールについて

アプリケーション・ルートにアプリケーションをインストールするには、ALTER PLUGGABLE DATABASE APPLICATION文を発行します。

アプリケーションはアプリケーション・ルートにのみインストールします。アプリケーションと同期するアプリケーションPDBでは、アプリケーションが自動的にインストールされます。自動による方法では、スクリプト、SQL文およびグラフィカル・ユーザー・インタフェース・ツールから1つ以上の手法を使用してインストールを実行できます。

ALTER PLUGGABLE DATABASE APPLICATION BEGIN INSTALL文でインストールを開始し、ALTER PLUGGABLE DATABASE APPLICATION END INSTALL文でインストールを終了します。各インストールには、ALTER PLUGGABLE DATABASE APPLICATION文で指定されるアプリケーション名とバージョン番号を関連付ける必要があります。

自動伝播によるアプリケーション・コンテナ内のアプリケーションのインストール

自動伝播によって、アプリケーションは、アプリケーション・ルート内のアプリケーションと同期するアプリケーションPDBにインストールされます。

前提条件

次の前提条件を満たしている必要があります。

  • 現在のユーザーにはALTER PLUGGABLE DATABASEシステム権限が必要で、権限は一般にアプリケーション・ルートで付与されている必要があります。

  • アプリケーション・ルートは読取り/書込みオープンである必要があります。

自動伝播を使用してアプリケーションをインストールするには:

  1. SQL*PlusまたはSQL Developerで、現在のコンテナがPDBであることを確認します。

  2. 次の形式でALTER PLUGGABLE DATABASE APPLICATION BEGIN INSTALL文を実行します。

    ALTER PLUGGABLE DATABASE APPLICATION application_name BEGIN INSTALL 'application_version_number';

    たとえば、application_namesalesappapplication_version_numberが4.2の場合は次の文を実行します。

    ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN INSTALL '4.2';
  3. スクリプト、SQL文またはグラフィカル・ユーザー・インタフェース・ツールを使用してアプリケーションをインストールします。

  4. 次の形式でALTER PLUGGABLE DATABASE APPLICATION END INSTALL文を実行します。

    ALTER PLUGGABLE DATABASE APPLICATION application_name END INSTALL 'application_version_number';

    たとえば、application_namesalesappapplication_version_numberが4.2の場合は次の文を実行します。

    ALTER PLUGGABLE DATABASE APPLICATION salesapp END INSTALL '4.2';

    ノート:

    application_nameおよびapplication_version_numberALTER PLUGGABLE DATABASE APPLICATION BEGIN INSTALL文とALTER PLUGGABLE DATABASE APPLICATION END INSTALL文で一致していることを確認します。
  5. SYNC句を指定したALTER PLUGGABLE DATABASE APPLICATIONを発行して、アプリケーションをインストールする必要のあるすべてのアプリケーションPDBを同期します。

アプリケーション・コンテナ内のアプリケーションのアップグレード

アプリケーションに対する大きな変更によってアプリケーション・アップグレードが構成されます。アプリケーション・コンテナのアプリケーションをアップグレードできます。

この項では、次の項目について説明します。

アプリケーション・コンテナ内のアプリケーションのアップグレードについて

アプリケーション・ルート内のアプリケーションをアップグレードするには、ALTER PLUGGABLE DATABASE APPLICATION文を発行します。

アプリケーション・アップグレードの目的

アプリケーション定義は、アプリケーション・ルート内で1回アップグレードできます。これにより、アップグレードした定義を他のアプリケーションPDBと同期できます。

アプリケーションPDBは、アプリケーション・ルート内のアップグレードされたアプリケーション定義を自動的には継承しません。SYNC句を指定してALTER PLUGGABLE DATABASE文を手動実行すると、アプリケーションPDBがルート内のアプリケーションと同期されます。スクリプト、SQL文およびグラフィカル・ユーザー・インタフェース・ツールから1つ以上の手法を使用してアップグレードできます。

アプリケーションのアップグレードの動作

アプリケーションのアップグレード時に、Oracle Databaseによってアプリケーション・ルートが自動的にクローニングされます。

アップグレード中、アプリケーションPDBはルート・クローンを指しています。アップグレード中、アプリケーションは実行を継続します。アプリケーションPDBは、メタデータリンクおよび拡張データリンクの表およびビューに対してDMLを実行できます。アプリケーションPDBは、メタデータリンク・オブジェクト、拡張データリンク・オブジェクトおよびデータリンク・オブジェクトを問い合せることができます。

アップグレード後、アプリケーション・ルート・クローンはそのまま残り、ルート・クローン内にあるアップグレード前のバージョンのアプリケーションを使用するアプリケーションPDBを引き続きサポートします。アップグレードしたアプリケーションPDBは、アップグレードされたアプリケーション・ルートを指しています。アップグレードされないアプリケーションPDBは引き続きクローンを使用でき、アプリケーション・ルートに接続されているアプリケーションPDBも、ルート・クローンと同じアプリケーション・バージョンを使用できます。

ノート:

アプリケーションのアップグレードとは異なり、パッチ適用ではアプリケーション・ルート・クローンが作成されません。パッチ適用後にアプリケーションPDBが同期化されていない場合、問合せは、すでにパッチ適用されたアプリケーション・ルートに送信されます。

次の図は、アプリケーション・アップグレード・プロセスを示しています。

図17-1 アプリケーション・コンテナ内のアプリケーションのアップグレード

図17-1の説明が続きます
「図17-1 アプリケーション・コンテナ内のアプリケーションのアップグレード」の説明

ノート:

アプリケーション・ルートがオープン・モードである場合、アプリケーション・ルート・クローンは読取り専用モードになります。アプリケーション・ルートがクローズされている場合、アプリケーション・ルート・クローンもクローズされます。

アプリケーション・アップグレードのためのユーザー・インタフェース

アプリケーション・ルート内のアプリケーション定義をアップグレードするには、ALTER PLUGGABLE DATABASE APPLICATION ... UPGRADEコマンドを使用します。

ALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE文でアップグレードを開始し、ALTER PLUGGABLE DATABASE APPLICATION END UPGRADE文で終了します。各アップグレードには、ALTER PLUGGABLE DATABASE APPLICATION文で指定される、アプリケーション名、開始バージョン番号および終了バージョン番号を関連付ける必要があります。

ノート:

アプリケーション・ルートで透過的データ暗号化が有効になっている場合は、外部パスワード・ストアを構成する必要があります。

アプリケーション・コンテナ内のアプリケーションのアップグレード

アップグレード後に、アップグレードによって発生したアプリケーションの変更は、アプリケーション・ルートと同期されるアプリケーションPDBに伝播されます。

前提条件

  • CDBはローカルUNDOモードである必要があります。

  • 現在のユーザーにはALTER PLUGGABLE DATABASEシステム権限が必要で、権限は一般にアプリケーション・ルートで付与されている必要があります。

  • アプリケーション・ルートは読取り/書込みオープンである必要があります。

  • アプリケーション・ルートで透過的データ暗号化が有効にされている場合は、外部パスワード・ストアを構成する必要があります。

アプリケーション・コンテナ内のアプリケーションをアップグレードするには:

  1. SQL*PlusまたはSQL Developerで、現在のコンテナがアプリケーション・ルートであることを確認します。

  2. 次の形式でALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE文を実行します。

    ALTER PLUGGABLE DATABASE APPLICATION application_name BEGIN UPGRADE 'application_start_version_number' TO 'application_end_version_number';

    たとえば、application_namesalesappapplication_start_version_numberが4.2、application_end_version_numberが4.3の場合は、次の文を実行します。

    ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN UPGRADE '4.2' TO '4.3';
  3. スクリプト、SQL文またはグラフィカル・ユーザー・インタフェース・ツールを使用してアプリケーションをアップグレードします。

  4. 次の形式でALTER PLUGGABLE DATABASE APPLICATION END UPGRADE文を実行します。

    ALTER PLUGGABLE DATABASE APPLICATION application_name END UPGRADE TO 'application_end_version_number';

    たとえば、application_namesalesappapplication_end_version_numberが4.3の場合は、次の文を実行します。

    ALTER PLUGGABLE DATABASE APPLICATION salesapp END UPGRADE TO '4.3';

    ノート:

    application_nameおよびapplication_end_version_numberALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE文とALTER PLUGGABLE DATABASE APPLICATION END UPGRADE文で一致していることを確認します。
  5. SYNC句を指定したALTER PLUGGABLE DATABASE APPLICATIONを発行して、アプリケーションをアップグレードする必要のあるすべてのアプリケーションPDBを同期します。

アプリケーション・コンテナ内のアプリケーションへのパッチ適用

アプリケーションに対する小さな変更によってアプリケーション・パッチが構成されます。

小さな変更の例として、バグ修正やセキュリティ・パッチがあります。アプリケーション・コンテナのアプリケーションにパッチ適用できます。

この項では、次の項目について説明します。

アプリケーション・コンテナ内のアプリケーションへのパッチ適用について

アプリケーション・ルート内のアプリケーションにパッチ適用するには、ALTER PLUGGABLE DATABASE APPLICATION文を発行します。

アプリケーション・ルート内のアプリケーションにのみパッチ適用します。アプリケーションと同期するアプリケーションPDBによって変更が適用されます。スクリプト、SQL文およびグラフィカル・ユーザー・インタフェース・ツールから1つ以上の手法を使用して、パッチ適用を実行できます。

パッチ適用は、小さな操作セットに制限されます。一般に、表の削除などの破壊的な操作はパッチでは許可されていません。アプリケーションにパッチを適用しようとし、操作で「アプリケーション・パッチでサポートされていない操作」エラーが発生した場合、必要な変更を行うにはパッチ適用ではなくアプリケーションをアップグレードします。

ノート:

アプリケーションのアップグレードとは異なり、パッチ適用ではアプリケーション・ルート・クローンが作成されません。パッチ適用後にアプリケーションPDBが同期化されていない場合、問合せは、すでにパッチ適用されたアプリケーション・ルートに送信されます。

ALTER PLUGGABLE DATABASE APPLICATION BEGIN PATCH文でパッチ適用の開始を示し、ALTER PLUGGABLE DATABASE APPLICATION END PATCH文でパッチ適用の終了を示します。各パッチ適用は、アプリケーション名、開始バージョン番号および終了バージョン番号に関連付けられている必要があります。ALTER PLUGGABLE DATABASE APPLICATION文にこれらの値を指定します。

自動伝播によるアプリケーション・コンテナ内のアプリケーションへのパッチ適用

パッチ適用に関連するアプリケーションの変更は、アプリケーション・ルート内のアプリケーションと同期されるアプリケーションPDBに伝播されます。

前提条件

次の前提条件を満たしている必要があります。

  • 現在のユーザーにはALTER PLUGGABLE DATABASEシステム権限が必要で、権限は一般にアプリケーション・ルートで付与されている必要があります。

  • アプリケーション・ルートは読取り/書込みオープン・モードである必要があります。

  1. SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
  2. 次の形式でALTER PLUGGABLE DATABASE APPLICATION BEGIN PATCH文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION application_name BEGIN PATCH patch_number MINIMUM VERSION 'minimum_application_version_number';
    たとえば、application_namesalesapppatch_numberが987654、minimum_application_version_numberが4.2の場合は、次の文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN PATCH 987654 MINIMUM VERSION '4.2';
    minimum_application_version_numberは、パッチを適用する前にアプリケーションのインストールが必要な最小アプリケーション・バージョンを示します。
  3. スクリプト、SQL文またはグラフィカル・ユーザー・インタフェース・ツールを使用してアプリケーションにパッチ適用します。
  4. 次の形式でALTER PLUGGABLE DATABASE APPLICATION END PATCH文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION application_name END PATCH patch_number;
    たとえば、application_namesalesapppatch_numberが987654の場合は、次の文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION salesapp END PATCH 987654;

    ノート:

    application_nameおよびpatch_numberALTER PLUGGABLE DATABASE APPLICATION BEGIN PATCH文とALTER PLUGGABLE DATABASE APPLICATION END PATCH文で一致していることを確認します。
  5. SYNC句を指定したALTER PLUGGABLE DATABASE APPLICATIONを発行して、アプリケーションにパッチを適用する必要のあるすべてのアプリケーションPDBを同期します。

アプリケーション・コンテナへの既存アプリケーションの移行

PDBにインストールされているアプリケーションをアプリケーション・コンテナに移行できます。

アプリケーションをアプリケーション・ルートまたはアプリケーションPDBに移行できます。たとえば、Oracle Database 12cリリース2 (12.2) CDBに接続中のPDBにインストールされているアプリケーションを、Oracle Database 18c CDBのアプリケーション・コンテナに移行できます。

この項では、次の項目について説明します。

アプリケーション・コンテナへの既存アプリケーションの移行について

既存のPDBを使用してアプリケーション・ルートを作成して、アプリケーションをアプリケーション・ルートに移行できます。

アプリケーションが複数のPDBにインストールされる場合、PDBのいずれかを使用して、アプリケーション・ルートを作成できます。PDBのクローニングまたはアプリケーション・ルートとしてのPDBの接続など、PDBをアプリケーション・ルートにコピーするために使用できる方法のいずれかを使用できます。

共通ユーザー、ロールまたはプロファイルがアプリケーション・ルートを作成するために使用されるPDBに存在する場合、DBMS_PDBパッケージのプロシージャを実行して、アプリケーションに関連付ける必要があります。PDBから作成されるアプリケーション・ルートを最初に開くと、各ローカル・ユーザー、ロールおよびプロファイルが共通とマークされます。DBMS_PDBパッケージのプロシージャは、ユーザー、ロールまたはプロファイルをアプリケーションと関連付けます。そのため、ユーザー、ロールまたはプロファイルのすべてのDDL操作は、このアプリケーションのアプリケーションBEGIN...ENDブロック内で後で実行する必要があります。

共有データベース・オブジェクトがアプリケーション・ルートに存在する場合、DBMS_PDBパッケージのプロシージャを実行して、データベース・オブジェクトをアプリケーション共通オブジェクトとしてアプリケーションに関連付ける必要があります。そのため、アプリケーション共通オブジェクトのすべてのDDL操作は、このアプリケーションのアプリケーションBEGIN...ENDブロック内で後で実行する必要があります。

アプリケーション・ルートを配置した後、既存のPDBを使用して、新しいアプリケーション・コンテナにアプリケーションPDBを作成できます。作成されるアプリケーションPDBは、データを含むアプリケーション・オブジェクトを含む必要があります。アプリケーション・バージョンとパッチ番号を同期し、アプリケーションPDBの共有データベース・オブジェクトを確立する追加ステップが必要です。

同じアプリケーションを実行する100個のPDBのシナリオ

現在同じアプリケーションを実行している100個のPDBがあり、これらのPDBをアプリケーション・コンテナに移行するとします。これらのPDBには、アプリケーションが必要とするアプリケーション共通オブジェクトおよび共通ユーザー、ロールおよびプロファイルが含まれます。PDBをアプリケーション・コンテナに移行するには、次のステップに従います。

  1. PDBのいずれかを選択し、「既存のPDBを使用したアプリケーション・ルートの作成」の手順を使用して、このPDBとともにアプリケーション・ルートを作成します。

    このステップの一部として、DBMS_PDBパッケージのプロシージャを実行して、データベース・オブジェクト、ユーザー、ロールおよびプロファイルをアプリケーションに関連付けます。

  2. 「既存のPDBを使用したアプリケーションPDBの作成」の手順を使用して、アプリケーションを実行しているPDBを使用して100個のアプリケーションPDBを作成します。

既存のPDBを使用したアプリケーション・ルートの作成

アプリケーション・コンテナにPDBをコピーすることで、PDBにインストールされているアプリケーションを移行します。

前提条件

Oracle Database 12cリリース2 (12.2)以降のCDBが存在する必要があります。

  1. CDBで、既存のPDBをクローニングするか、既存のPDBを再配置するか、既存のPDBを切断して接続することにより、アプリケーション・ルートを作成します。
    新しいアプリケーション・ルートは、アプリケーションで使用されるすべてのデータベース・オブジェクトを含む必要があります。
  2. 現在のコンテナとしてアプリケーション・ルートを使用する場合、ALTER PLUGGABLE DATABASE ... BEGIN INSTALL文を発行して、アプリケーション・インストール操作を開始します。
  3. オプション: DBA_USERSDBA_ROLESおよびDBA_PROFILESビューのCOMMON列を問い合せて、共通のユーザー、ロールおよびプロファイルを判断します。
  4. DBMS_PDBパッケージの次のプロシージャを実行して、ユーザー、ロールおよびプロファイルをアプリケーションに関連付けます。
    • SET_USER_EXPLICITプロシージャを実行して、アプリケーションの共通ユーザーを設定します。
    • SET_ROLE_EXPLICITプロシージャを実行して、アプリケーションの共通ロールを設定します。
    • SET_PROFILE_EXPLICITプロシージャを実行して、アプリケーションの共通プロファイルを設定します。
    DBMS_PDBパッケージに対するEXECUTE権限がない場合は、DBMS_PDB_ALTER_SHARINGパッケージ内のこれらのプロシージャを実行できます。
  5. オプション: 現在のコンテナとしてアプリケーション・ルートを使用する場合、DBA_OBJECTSビューのSHARING列を問い合せて、共有するデータベース・オブジェクトを判断します。
  6. DBMS_PDBパッケージの次のプロシージャを実行してデータベース・オブジェクトをアプリケーションに関連付けます。
    • SET_DATA_LINKEDプロシージャを実行して、データリンク・アプリケーションの共通オブジェクトを設定します。
    • SET_METADATA_LINKEDプロシージャを実行して、メタデータリンク・アプリケーションの共通オブジェクトを設定します。
    • SET_EXT_DATA_LINKEDプロシージャを実行して、拡張データリンク・アプリケーションの共通オブジェクトを設定します。
    DBMS_PDBパッケージに対するEXECUTE権限がない場合は、DBMS_PDB_ALTER_SHARINGパッケージ内のこれらのプロシージャを実行できます。
  7. ALTER PLUGGABLE DATABASE ... END INSTALL文を発行して、アプリケーションのインストールの操作を終了します。
  8. オプション: 以前に実行した問合せを再実行して、データベース・オブジェクトの共有プロパティが正しく、ユーザー、ロールおよびプロファイルの共通プロパティが正しいことを確認します。
  9. オプション: 既存のPDBがアプリケーションを使用する場合、これらの既存のPDBを使用して、アプリケーションPDBを作成します。
既存のPDBを使用したアプリケーションPDBの作成

既存のアプリケーションをアプリケーション・ルートに移行した後で、アプリケーションを使用する既存のPDBを使用して、アプリケーションPDBを作成できます。

前提条件

次の前提条件を満たしている必要があります。

  • Oracle Database 12cリリース2 (12.2) CDBが存在する必要があり、アプリケーションPDBが属するアプリケーション・ルートが存在する必要があります。

  • PDBは、アプリケーションで使用されるすべてのアプリケーション共通オブジェクトを含む必要があります。

  • アプリケーションがアプリケーション・ルートにインストールされている必要があります。

  1. アプリケーション・ルートで、既存のPDBをクローニングするか、既存のPDBを切断して接続することにより、アプリケーションPDBを作成します。
    PDBの作成中に違反が報告されます。
  2. 必要な権限を持つユーザーとして新規PDBに接続または切替えを行います。
  3. ORACLE_HOME/rdbms/adminディレクトリにあるpdb_to_apppdb.sqlスクリプトを実行します。
    スクリプトは、アプリケーションPDBとアプリケーション・ルートを自動的に同期します。
  4. オプション: DBA_OBJECTSビューのSHARING列を問い合せて、データベース・オブジェクトの共有プロパティが正しいことを確認します。
  5. オプション: DBA_USERSDBA_ROLESおよびDBA_PROFILESビューのCOMMON列を問い合せて、ユーザー、ロールおよびプロファイルの共通プロパティが正しいことを確認します。

アプリケーションPDB内のアプリケーションの同期

アプリケーションの同期により、アプリケーションPDB内のアプリケーションがアプリケーション・ルートの最新バージョンおよびパッチに更新されます。

ノート:

アプリケーション・ルートのアプリケーションがインストール、アップグレード、パッチ適用またはアンインストールされる場合、アプリケーション・ルートに属するアプリケーションPDBは同期されるまで変更されません。

ユーザー作成アプリケーション以外に、アプリケーション・コンテナには暗黙的に作成されるアプリケーションも含まれます。アプリケーションは、アプリケーション共通ユーザー操作がALTER PLUGGABLE DATABASE BEGIN/END文の外部のCONTAINER=ALL句で発行されたときにアプリケーション・ルートに暗黙的に作成されます。アプリケーション共通ユーザー操作には、CREATE USER文による共通ユーザーの作成や、ALTER USER文による共通ユーザーの変更などの操作が含まれます。暗黙的なアプリケーションの名前はAPP$guidで、guidはアプリケーション・ルートのGUIDです。暗黙的アプリケーションは、アプリケーション・ルートが初めて開かれたときに作成されます。

アプリケーションPDBが現在のコンテナであるときに次のSQL文(application_nameはアプリケーションの名前)を発行することで、アプリケーションPDBの1つのアプリケーションを同期します。

ALTER PLUGGABLE DATABASE APPLICATION application_name SYNC;

アプリケーションPDBが現在のコンテナであるときに次のSQL文を発行することで、暗黙的に作成されたアプリケーションを含め、アプリケーションPDB内のすべてのアプリケーションを同期します。

ALTER PLUGGABLE DATABASE APPLICATION ALL SYNC;

アプリケーションPDBが現在のコンテナであるときに次のSQL文を発行することで、アプリケーションPDB内の暗黙的に作成されたアプリケーションを同期します。

  • ALTER PLUGGABLE DATABASE APPLICATION APP$guid SYNC;

    guidはアプリケーション・ルートのGUIDです。

  • ALTER PLUGGABLE DATABASE APPLICATION APP$CON SYNC;

    APP$CONは論理アプリケーション名であり、Oracle Databaseが暗黙的なアプリケーションの実際の名前に自動的に変換します。

前提条件

現行ユーザーにはALTER PLUGGABLE DATABASEシステム権限が必要です。

  1. SQL*Plusで、現在のコンテナがアプリケーションPDBであることを確認します。
  2. SYNC句を指定してALTER PLUGGABLE DATABASE APPLICATION文を実行します。

例17-2 アプリケーションPDB内の特定のアプリケーションの同期化

この例では、salesappというアプリケーションをアプリケーション・ルートの最新のアプリケーション変更と同期します。

ALTER PLUGGABLE DATABASE APPLICATION salesapp SYNC;

例17-3 アプリケーションPDB内のすべてのアプリケーションの同期

この例では、アプリケーションPDB内のすべてのアプリケーションをアプリケーション・ルートの最新のアプリケーション変更と同期します。

ALTER PLUGGABLE DATABASE APPLICATION ALL SYNC;

例17-4 アプリケーションPDB内の暗黙的に作成されたアプリケーションの同期

この例では、アプリケーションPDB内の暗黙的に作成されたすべてのアプリケーションを、アプリケーション・ルート内の暗黙的に作成されたアプリケーションに対する最新のアプリケーション変更と同期します。

ALTER PLUGGABLE DATABASE APPLICATION APP$CON SYNC;

アプリケーション・ルート・レプリカのプロキシPDBとの同期

異なるCDB内のアプリケーション・コンテナが同じアプリケーションを持つ場合、それらのアプリケーション・ルートは、マスター・アプリケーション・ルート、レプリカ・アプリケーション・ルートおよびプロキシPDBを作成することで同期を維持できます。

この項では、次の項目について説明します。

アプリケーション・ルート・レプリカのプロキシPDBとの同期について

プロキシPDBは、アプリケーション・ルートとアプリケーション・ルートのレプリカを同期できます。

1つのアプリケーションを複数のアプリケーション・コンテナにインストールできます。プロキシPDBを使用すると、アプリケーションをより効率的にインストール、アップグレードおよびパッチ適用できます。

この構成では、1つのアプリケーション・コンテナにマスター・アプリケーション・ルートがあります。マスター・アプリケーション・ルートは、アプリケーションをインストール、アップグレードおよびパッチ適用する場所です。アプリケーション・ルート・レプリカは、マスター・アプリケーション・ルートの完全なコピーです。各アプリケーション・ルート・レプリカは、マスター・アプリケーション・ルート内のプロキシPDBによって参照されます。

プロキシPDBは、マスター・アプリケーション・ルート内のアプリケーション変更と同期されると、その変更を参照先のアプリケーション・ルート・レプリカに伝播します。アプリケーション・ルート・レプリカが同期された後、アプリケーション・ルート・レプリカに接続されているアプリケーションPDBは、レプリカと同期する方法で変更を取得できます。

次の図に、プロキシPDBを使用してアプリケーション・ルート・レプリカを同期する構成を示します。

図17-2 アプリケーション・ルート・レプリカとプロキシPDBの同期

図17-2の説明が続きます
「図17-2 アプリケーション・ルート・レプリカとプロキシPDBの同期」の説明

また、アプリケーション・ルート・レプリカが構成され、固有のアプリケーションPDBを持つ場合、マスター・アプリケーション・ルート内のCONTAINERS句を含む問合せは、現在のアプリケーション・コンテナおよびアプリケーション・ルート・レプリカのあるアプリケーション・コンテナからのデータを返すことができます。問合せは、アプリケーション・ルート・レプリカおよびレプリカに接続しているオープンされたアプリケーションPDBからの結果を表示できます。

アプリケーション・ルート・レプリカを参照するプロキシPDBの作成

複数のアプリケーション・コンテナが同じアプリケーションを実行する場合、アプリケーション・コンテナ内のアプリケーションはプロキシPDBを使用して同期を維持できます。

  1. CREATE PLUGGABLE DATABASE文を使用して、マスター・アプリケーション・ルートを持つアプリケーション・コンテナを作成します。
    今すぐまたは後で、アプリケーション・コンテナにアプリケーションをインストールします。
  2. 次のいずれかの方法で、アプリケーション・ルート・レプリカを持つアプリケーション・コンテナを作成します。
    • サポートされる方法を使用して空のアプリケーション・コンテナを作成します。
    • マスター・アプリケーション・ルートをクローニングします。
    アプリケーション・ルート・レプリカで使用されるリスナーのポートが1521でない場合は、作成時にPORT句が必要です。アプリケーション・ルート・レプリカのホストがマスター・アプリケーション・ルートのホストと異なる場合は、作成時にHOST句が必要です。
    このアプリケーション・ルート・レプリカは、プロキシPDBによって参照されます。
  3. マスター・アプリケーション・ルートで、前のステップで作成したアプリケーション・ルート・レプリカを参照するプロキシPDBを作成します。
  4. プロキシPDBをオープンして同期します。
    プロキシPDBは同期されると、マスター・アプリケーション・ルート内の変更をアプリケーション・ルート・レプリカに伝播します。
  5. オプション: マスター・アプリケーション・ルートで、インストール、アップグレードまたはパッチ適用することでアプリケーションを変更します。
  6. オプション: SYNC句を指定したALTER PLUGGABLE DATABASE APPLICATION文を実行して、プロキシPDBをマスター・アプリケーション・ルート内のアプリケーション変更と同期します。
    プロキシPDBは同期されると、マスター・アプリケーション・ルート内の変更をアプリケーション・ルート・レプリカに伝播します。

例17-5 アプリケーション・ルート・レプリカとプロキシPDBの同期

この例では、hqdbおよびdepdbの2つのCDBが存在していることを想定しています。目標は、各CDB内のアプリケーション・コンテナで同じアプリケーションの同期を維持することです。この目標を実現するために、この例では次のアプリケーション・コンテナを構成します。

  • hqdb CDBには、msappconというマスター・アプリケーション・ルートがあるアプリケーション・コンテナが含まれます。

    • sampleappというアプリケーションがmsappconマスター・アプリケーション・ルートにインストールされます。

    • msappconアプリケーション・ルートには、mspdb1およびmspdb2という2つのアプリケーションPDBが含まれます。

    • msappconアプリケーション・ルートには、他のCDB内のアプリケーション・ルート・レプリカを参照するprxypdbという名前のプロキシPDBも含まれます。

  • depdb CDBには、depappconというアプリケーション・ルート・レプリカがあるアプリケーション・コンテナが含まれます。

    • sampleappというアプリケーションは、msappconマスター・アプリケーション・ルート内のプロキシPDB prxypdbから伝播され、depappconマスター・アプリケーション・ルートにインストールされます。

    • depappconアプリケーション・ルートには、deppdb1およびdeppdb2という2つのアプリケーションPDBが含まれます。

この例では、msappconマスター・アプリケーション・ルート内のsampleappアプリケーションに対する変更が、アプリケーションPDBが同期されたときに両方のCDB内のアプリケーションPDBにどのように適用されるかを示します。

  1. hqdb CDBにマスター・アプリケーション・ルートを持つアプリケーション・コンテナを作成します。

    1. SQL*Plusで、現在のコンテナがhqdb CDBルートであることを確認します。

    2. 次の文でPDBシードからアプリケーション・コンテナを作成します。

      CREATE PLUGGABLE DATABASE msappcon 
        AS APPLICATION CONTAINER
        ADMIN USER msappconadm IDENTIFIED BY password  STORAGE (MAXSIZE 2G)
        DEFAULT TABLESPACE appcontbs 
          DATAFILE '/disk1/oracle/dbs/mssappcon/msappcon01.dbf' SIZE 250M AUTOEXTEND ON
        FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/msappcon/');
    3. 新規マスター・アプリケーション・ルートを読取り/書込みモードでオープンします。

      ALTER PLUGGABLE DATABASE msappcon OPEN;
  2. マスター・アプリケーション・ルートにアプリケーションをインストールします。

    1. コンテナをマスター・アプリケーション・ルートに変更します。

      ALTER SESSION SET CONTAINER=msappcon;
    2. アプリケーションのインストールを開始します。

      ALTER PLUGGABLE DATABASE APPLICATION sampleapp BEGIN INSTALL '1.0';
    3. アプリケーションをインストールします。

      たとえば、データベース・オブジェクトを作成できます。

      CREATE TABLE apptb SHARING=METADATA
         (id            NUMBER(6), 
          widget_name   VARCHAR2(20));
      
    4. アプリケーションのインストールを終了します。

      ALTER PLUGGABLE DATABASE APPLICATION sampleapp END INSTALL '1.0';
  3. 1つ以上のアプリケーションPDBをマスター・アプリケーション・ルートに作成し、同期します。

    1. SQL*Plusで、現在のコンテナがマスター・レプリケーション・ルートであることを確認します。

    2. マスター・アプリケーション・ルートにアプリケーションPDBを作成します。

      たとえば、PDBシードから2つのアプリケーションPDBを作成します。

      CREATE PLUGGABLE DATABASE mspdb1 ADMIN USER mspdb1admin IDENTIFIED BY password
        STORAGE (MAXSIZE 2G)
        DEFAULT TABLESPACE mspdb1tbs 
          DATAFILE '/disk1/oracle/dbs/mspdb1/mspdb101.dbf' SIZE 250M AUTOEXTEND ON
        FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/mspdb1/');
      
      CREATE PLUGGABLE DATABASE mspdb2 ADMIN USER mspdb2admin IDENTIFIED BY password
        STORAGE (MAXSIZE 2G)
        DEFAULT TABLESPACE mspdb2tbs 
          DATAFILE '/disk1/oracle/dbs/mspdb2/mspdb201.dbf' SIZE 250M AUTOEXTEND ON
        FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/mspdb2/');
    3. 両方のアプリケーションPDBをオープンします。

      ALTER PLUGGABLE DATABASE mspdb1 OPEN;
      ALTER PLUGGABLE DATABASE mspdb2 OPEN;
    4. アプリケーションPDBをマスター・アプリケーション・ルートと同期します。

      ALTER SESSION SET CONTAINER=mspdb1;
      ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
      
      ALTER SESSION SET CONTAINER=mspdb2;
      ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
  4. depdb CDBにアプリケーション・ルート・レプリカを持つアプリケーション・コンテナを作成します。

    1. SQL*Plusで、現在のコンテナがdepdb CDBルートであることを確認します。

    2. 次の文でPDBシードからアプリケーション・コンテナを作成します。

      CREATE PLUGGABLE DATABASE depappcon 
        AS APPLICATION CONTAINER
        ADMIN USER depappconadm IDENTIFIED BY password
        STORAGE (MAXSIZE 2G)
        DEFAULT TABLESPACE appcontbs 
          DATAFILE '/disk2/oracle/dbs/depsappcon/depappcon01.dbf' SIZE 250M AUTOEXTEND ON
        FILE_NAME_CONVERT = ('/disk2/oracle/dbs/pdbseed/', '/disk2/oracle/dbs/depappcon/');

      ノート:

      • アプリケーション・ルート・レプリカで使用されるリスナーのポートが1521でない場合は、PORT句が必要です。

      • アプリケーション・ルート・レプリカのホストがマスター・アプリケーション・ルートのホストと異なる場合は、HOST句が必要です。

    3. 新規アプリケーション・ルート・レプリカを読取り/書込みモードでオープンします。

      ALTER PLUGGABLE DATABASE depappcon OPEN;
  5. プロキシPDBをマスター・アプリケーション・ルートに作成し、同期します。

    1. SQL*Plusで、現在のコンテナがマスター・レプリケーション・ルートであることを確認します。

    2. アプリケーション・ルート・レプリカへのデータベース・リンクを作成します。

      CREATE PUBLIC DATABASE LINK depappcon CONNECT TO depappconadm IDENTIFIED BY password USING 'depappcon';
    3. プロキシPDBを作成します。

      CREATE PLUGGABLE DATABASE prxypdb AS PROXY FROM depappcon@depappcon
         FILE_NAME_CONVERT = ('/disk2/oracle/dbs/depsappcon/', '/disk1/oracle/dbs/prxypdb/');
    4. プロキシPDBをオープンします。

      ALTER PLUGGABLE DATABASE prxypdb OPEN;
    5. プロキシPDBをマスター・アプリケーション・ルートと同期します。

      ALTER SESSION SET CONTAINER=prxypdb;
      ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
  6. 1つ以上のアプリケーションPDBをアプリケーション・ルート・レプリカに作成し、同期します。

    1. コンテナをアプリケーション・ルート・レプリカに変更します。

      ALTER SESSION SET CONTAINER=depappcon;
    2. アプリケーション・ルート・レプリカにアプリケーションPDBを作成します。

      たとえば、PDBシードから2つのアプリケーションPDBを作成します。

      CREATE PLUGGABLE DATABASE deppdb1 ADMIN USER deppdb1admin IDENTIFIED BY password
        STORAGE (MAXSIZE 2G)
        DEFAULT TABLESPACE deppdb1tbs 
          DATAFILE '/disk2/oracle/dbs/deppdb1/deppdb101.dbf' SIZE 250M AUTOEXTEND ON
        FILE_NAME_CONVERT = ('/disk2/oracle/dbs/pdbseed/', '/disk2/oracle/dbs/deppdb1/');
      
      CREATE PLUGGABLE DATABASE deppdb2 ADMIN USER deppdb2admin IDENTIFIED BY password
        STORAGE (MAXSIZE 2G)
        DEFAULT TABLESPACE deppdb2tbs 
          DATAFILE '/disk2/oracle/dbs/deppdb2/deppdb201.dbf' SIZE 250M AUTOEXTEND ON
        FILE_NAME_CONVERT = ('/disk2/oracle/dbs/pdbseed/', '/disk2/oracle/dbs/deppdb2/');
    3. 両方のアプリケーションPDBをオープンします。

      ALTER PLUGGABLE DATABASE deppdb1 OPEN;
      ALTER PLUGGABLE DATABASE deppdb2 OPEN;
    4. アプリケーションPDBをマスター・アプリケーション・ルートと同期します。

      ALTER SESSION SET CONTAINER=deppdb1;
      ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
      
      ALTER SESSION SET CONTAINER=deppdb2;
      ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
  7. アプリケーション・ルート・レプリカのアプリケーションPDB内のapptb表の構造を確認します。

    1. アプリケーション・ルート・レプリカから、コンテナをdeppdb1アプリケーションPDBに切り替えます。

      ALTER SESSION SET CONTAINER=deppdb1;
    2. apptb表を記述します。

      desc apptb

      出力は次のようになります。

       Name                                      Null?    Type
       ----------------------------------------- -------- ----------------------------
       ID                                                 NUMBER(6)
       WIDGET_NAME                                        VARCHAR2(20)
  8. マスター・アプリケーション・ルートで、アプリケーションをアップグレードします。

    1. コンテナをマスター・アプリケーション・ルートに変更します。

      ALTER SESSION SET CONTAINER=msappcon;
    2. アプリケーションのアップグレードを開始します。

      ALTER PLUGGABLE DATABASE APPLICATION sampleapp BEGIN UPGRADE '1.0' TO '1.1';
    3. アプリケーションを変更します。

      たとえば、apptb表に行を追加します。

      ALTER TABLE apptb ADD (widget_type VARCHAR2(30));
    4. アプリケーションのアップグレードを終了します。

      ALTER PLUGGABLE DATABASE APPLICATION sampleapp END UPGRADE TO '1.1';
  9. プロキシPDBをマスター・アプリケーション・ルートと同期します。

    ALTER SESSION SET CONTAINER=prxypdb;
    ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
  10. アプリケーション・ルート・レプリカ内のアプリケーションPDBを同期し、アプリケーションのアップグレードを確認します。

    1. アプリケーションPDBを同期します。

      ALTER SESSION SET CONTAINER=deppdb1;
      ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
      
      ALTER SESSION SET CONTAINER=deppdb2;
      ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
    2. アプリケーション・ルート・レプリカから、コンテナをdeppdb1アプリケーションPDBに切り替えます。

      ALTER SESSION SET CONTAINER=deppdb1;
    3. apptb表を記述します。

      desc apptb

      出力は次のようになります。

       Name                                      Null?    Type
       ----------------------------------------- -------- ----------------------------
       ID                                                 NUMBER(6)
       WIDGET_NAME                                        VARCHAR2(20)
       WIDGET_TYPE                                        VARCHAR2(30)

      widget_type列がapptb表に追加されたため、アプリケーション・アップグレード内の変更が出力に反映されます。

アプリケーションの互換バージョンの設定

アプリケーションの互換性バージョンは、アプリケーション・コンテナに属するアプリケーションPDBで使用可能なアプリケーション・バージョンのうち、最も古いバージョンです。

互換性バージョンは、互換性バージョンが設定され、アプリケーションPDBが作成されたときに適用されます。アプリケーションのアップグレードによって作成されたアプリケーション・ルート・クローンがある場合、互換性バージョンより古いバージョンに相当するすべてのアプリケーション・ルート・クローンが暗黙的に削除されます。

アプリケーションの互換バージョンを指定するには、アプリケーション・ルートが現在のコンテナであるときに、次のいずれかのSQL文を発行します。

  • ALTER PLUGGABLE DATABASE APPLICATION application_name SET COMPATIBILITY VERSION 'application_version_number';

    application_nameはアプリケーションの名前であり、application_version_numberは最も古い互換バージョンです。

  • ALTER PLUGGABLE DATABASE APPLICATION application_name SET COMPATIBILITY VERSION CURRENT;

    application_nameはアプリケーションの名前です。現在のバージョンは、アプリケーション・ルート内のアプリケーションのバージョンです。

ノート:

アプリケーション・コンテナの互換性設定より前のアプリケーション・バージョンを使用するアプリケーションPDBは接続できません。

  1. SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
  2. ALTER PLUGGABLE DATABASE APPLICATION SET COMPATIBILITY VERSION文を実行します。

例17-6 互換バージョンに特定のバージョン番号を設定する

この例は、salesappというアプリケーションの互換バージョンにバージョン4.2を設定しています。

ALTER PLUGGABLE DATABASE APPLICATION salesapp SET COMPATIBILITY VERSION '4.2';

例17-7 互換バージョンに現在のアプリケーション・バージョンを設定する

この例は、salesappというアプリケーションの互換バージョンに現在のアプリケーション・バージョンを設定しています。

ALTER PLUGGABLE DATABASE APPLICATION salesapp SET COMPATIBILITY VERSION CURRENT;

関連項目:

アプリケーション・ルート・クローンの詳細は、アプリケーション・コンテナ内のアプリケーションのアップグレードについてを参照してください

アプリケーションのインストール、アップグレードおよびパッチ適用の操作中の一括挿入の実行

SQL*Loaderは、アプリケーションのインストール、アップグレードおよびパッチ適用の操作中に表に一括挿入することがサポートされる唯一のユーティリティです。従来型パス・ロードのみ、アプリケーションのインストール、アップグレードおよびパッチ適用の操作中に一括挿入することがサポートされます。

ALTER PLUGGABLE DATABASE APPLICATION BEGINALTER PLUGGABLE DATABASE APPLICATION END文の間に正しいSQL*Loaderモジュール名を指定する必要があります。モジュール名はSQL Loader Conventional Path Loadです。

  1. SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
  2. 次のプロシージャを実行して、正しいモジュールを設定します。
    exec DBMS_APPLICATION_INFO.SET_MODULE('SQL Loader Conventional Path Load', '');
    このモジュールは、全体のアプリケーションのインストール、アップグレードまたはパッチ適用の操作に設定したままにする必要があります。
  3. アプリケーションのインストール、アップグレードまたはパッチを開始するにはALTER PLUGGABLE DATABASE APPLICATION BEGIN文を実行します。
    たとえば、アプリケーション・インストールの一部として一括挿入を実行している場合は、次の形式でALTER PLUGGABLE DATABASE APPLICATION BEGIN INSTALL文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION application_name BEGIN INSTALL 'application_version_number';
  4. SQL*Loaderを使用して、従来型パス・ロードを実行します。
  5. アプリケーションのインストール、アップグレードまたはパッチを終了するにはALTER PLUGGABLE DATABASE APPLICATION END文を実行します。
    たとえば、アプリケーション・インストールの一部として一括挿入を実行している場合は、次の形式でALTER PLUGGABLE DATABASE APPLICATION END INSTALL文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION application_name END INSTALL 'application_version_number';

    ノート:

    application_nameおよびapplication_version_numberALTER PLUGGABLE DATABASE APPLICATION BEGIN INSTALL文と ALTER PLUGGABLE DATABASE APPLICATION END INSTALL文で一致していることを確認します。

  6. SYNC句を指定したALTER PLUGGABLE DATABASE APPLICATIONを発行して、これらのアプリケーションの変更を含める必要のあるすべてのアプリケーションPDBを同期します。

例17-8 アプリケーションのインストール中の従来型パス・ロードの実行

この例では、従来型パス・ロードがアプリケーション・ルートで実行されます。

  1. SQL*Plusで、アプリケーション・ルートに切り替えます。

    ALTER SESSION SET CONTAINER=cdb1_approot1;
  2. 正しいモジュールを設定します。

    exec DBMS_APPLICATION_INFO.SET_MODULE('SQL Loader Conventional Path Load', '');
  3. アプリケーションのインストールを開始します。

    ALTER PLUGGABLE DATABASE APPLICATION APP1 BEGIN INSTALL '1';
  4. SQL*Loaderを使用して、従来型パス・ロードを実行します。

    host sqlldr u1/u1@cdb1_approot1 control=my_bulk_load.ctl rows=3 log=my_bulk_load.log
  5. アプリケーションのインストールを終了します。

    ALTER PLUGGABLE DATABASE APPLICATION APP1 END INSTALL '1';

関連項目:

SQL*Loaderの詳細は、『Oracle Databaseユーティリティ』を参照してください

アプリケーション・コンテナからのアプリケーションのアンインストール

アプリケーション・コンテナのアプリケーションをアンインストールできます。

この項では、次の項目について説明します。

アプリケーション・コンテナからのアプリケーションのアンインストールについて

アプリケーション・ルートからアプリケーションをアンインストールするには、ALTER PLUGGABLE DATABASE APPLICATION文を発行します。

アプリケーション・ルートからのみアプリケーションをアンインストールし、アプリケーションと同期するアプリケーションPDBではアプリケーションが自動的にアンインストールされます。アンインストール操作は、スクリプト、SQL文およびグラフィカル・ユーザー・インタフェース・ツールの1つ以上を使用して実行できます。

ALTER PLUGGABLE DATABASE APPLICATION BEGIN UNINSTALL文でアンインストールの開始を示し、ALTER PLUGGABLE DATABASE APPLICATION END UNINSTALL文でアンインストールの終了を示す必要があります。各アンインストールには、ALTER PLUGGABLE DATABASE APPLICATION文で指定されるアプリケーション名とバージョン番号を関連付ける必要があります。

アプリケーションをアンインストールしても、データ・ディクショナリからアプリケーションは削除されません。アプリケーションのアップグレード、パッチ適用およびアンインストールが許可されないように、アプリケーションがUNINSTALLEDとしてマークされます。

アプリケーションのアンインストール中は、アプリケーションへの破壊的な変更が許可されます。アプリケーションPDBで実行されているアプリケーションは、アンインストール中、およびアプリケーションがアプリケーション・ルートからアンインストールされた後も引き続き機能します。アプリケーションがアプリケーションPDBで引き続き機能できるのは、ALTER PLUGGABLE DATABASE APPLICATION BEGIN UNINSTALL文によって、アプリケーション・ルート・クローンと呼ばれるアプリケーション・ルートのクローンが作成されるためです。アプリケーション・ルート・クローンは古いバージョンのアプリケーション・オブジェクトのメタデータ・リポジトリとして機能し、最新バージョンのアプリケーションと同期されていないアプリケーションPDBが引き続き機能できるようにします。クローンはアプリケーションPDBがオープンされているときに作成されるため、アプリケーションをアンインストールする前に、ローカルUNDOをCDBレベルで構成する必要があります。

ノート:

アプリケーションのアップグレードでも、アプリケーション・ルート・クローンが作成されます。

アプリケーション・コンテナからのアプリケーションのアンインストール

アプリケーション・コンテナからアプリケーションをアンインストールするには、ALTER PLUGGABLE DATABASE APPLICATION BEGIN UNINSTALL文を実行してアンインストールを開始し、ALTER PLUGGABLE DATABASE APPLICATION END UNINSTALL文を実行して終了します。アプリケーションは、アプリケーション・ルートのアプリケーションと同期されるアプリケーションPDBからアンインストールされます。

次の前提条件を満たしている必要があります。
  • CDBはローカルUNDOモードである必要があります。

  • 現在のユーザーにはALTER PLUGGABLE DATABASEシステム権限が必要で、権限は一般にアプリケーション・ルートで付与されている必要があります。

  • アプリケーション・ルートは読取り/書込みオープン・モードである必要があります。

  1. SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
  2. 次の形式でALTER PLUGGABLE DATABASE APPLICATION BEGIN UNINSTALL文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION application_name BEGIN UNINSTALL;
    たとえば、application_namesalesappである場合は、次の文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN UNINSTALL;
  3. スクリプト、SQL文またはグラフィカル・ユーザー・インタフェース・ツールを使用してアプリケーションをアンインストールします。
  4. 次の形式でALTER PLUGGABLE DATABASE APPLICATION END UNINSTALL文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION application_name END UNINSTALL;
    たとえば、application_namesalesappである場合は、次の文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION salesapp END UNINSTALL;

    ノート:

    application_nameALTER PLUGGABLE DATABASE APPLICATION BEGIN UNINSTALL文とALTER PLUGGABLE DATABASE APPLICATION END UNINSTALL文で一致していることを確認します。
  5. SYNC句を指定したALTER PLUGGABLE DATABASE APPLICATIONを発行して、アプリケーションをアンインストールする必要のあるすべてのアプリケーションPDBを同期します。

アプリケーション共通オブジェクトの管理

アプリケーション共通オブジェクトは、アプリケーション・コンテナで共有されている、ユーザーにより作成されたデータベース・オブジェクトです。アプリケーション共通オブジェクトは、アプリケーション・ルートに作成されます。

この項では、次の項目について説明します。

アプリケーション共通オブジェクトについて

アプリケーション共通オブジェクトは、アプリケーション・ルートに作成され、アプリケーション・ルートに属するアプリケーションPDBと共有されています。

アプリケーション共通オブジェクトには、メタデータリンク、データリンクおよび拡張データリンクの3種類があります。次のタイプのデータベース・オブジェクトをアプリケーション共通オブジェクトにすることができます。

  • 分析ビュー

  • 属性ディメンション

  • ディレクトリ

  • 外部プロシージャ・ライブラリ

  • 階層

  • Javaクラス、JavaリソースおよびJavaソース

  • オブジェクト表、オブジェクト・タイプおよびオブジェクト・ビュー

  • 順序

  • パッケージ、ストアド・ファンクションおよびストアド・プロシージャ

  • シノニム

  • 表(グローバル一時表を含む)

  • トリガー

  • ビュー

この項では、次の項目について説明します。

アプリケーション共通オブジェクトの作成

現在のコンテナがアプリケーション・ルートのときにCREATE文を発行し、SHARING句を指定することで、アプリケーション共通オブジェクトを作成します。

共有属性は、CREATE文にSHARING句を含めるか、アプリケーション・ルートでDEFAULT_SHARING初期化パラメータを設定することで指定できます。DEFAULT_SHARING初期化パラメータを設定する場合、設定は、アプリケーション・ルートに作成されたサポートされるタイプのすべてのデータベース・オブジェクトのデフォルト共有属性です。ただし、SHARING句がCREATE文に含まれる場合、その設定はDEFAULT_SHARING初期化パラメータの設定をオーバーライドします。

共有属性に対して次のいずれかを指定できます。

  • METADATA: メタデータ・リンクはデータベース・オブジェクトのメタデータを共有しますが、データは各コンテナに固有です。これらのデータベース・オブジェクトは、メタデータリンク・アプリケーション共通オブジェクトと呼ばれます。この設定がデフォルトです。

  • DATA: データ・リンクはデータベース・オブジェクトを共有し、そのデータはアプリケーション・コンテナ内のすべてのコンテナに対して同じです。そのデータはアプリケーション・ルートにのみ格納されます。これらのデータベース・オブジェクトは、データリンク・アプリケーション共通オブジェクトと呼ばれます。

  • EXTENDED DATA: 拡張データ・リンクはデータベース・オブジェクトを共有し、アプリケーション・ルートのそのデータはアプリケーション・コンテナ内のすべてのコンテナに対して同じです。ただし、アプリケーション・コンテナの各アプリケーションPDBには、アプリケーションPDBに一意のデータを格納できます。このタイプのデータベース・オブジェクトの場合、データはアプリケーション・ルートに格納され、必要に応じて各アプリケーションPDBに格納されます。これらのデータベース・オブジェクトは、拡張データリンク・アプリケーション共通オブジェクトと呼ばれます。

  • NONE: データベース・オブジェクトは共有されません。

ほとんどのタイプのアプリケーション共通オブジェクトの場合、SHARING句の有効な設定はMETADATAおよびNONEのみです。次のタイプのアプリケーション共通オブジェクトでは、SHARING句に追加の設定を行うことができます。

  • 表(オブジェクト表を除く)の場合、SHARING句にはMETADATADATAEXTENDED DATAまたはNONEを設定できます。オブジェクト表の場合は、METADATAまたはNONEのみが有効です。

  • ビュー(オブジェクト・ビューを除く)の場合、SHARING句にはMETADATADATAEXTENDED DATAまたはNONEを設定できます。オブジェクト・ビューの場合は、METADATAまたはNONEのみが有効です。

  • 順序の場合、SHARING句にはMETADATADATAまたはNONEを設定できます。

    メタデータ・リンク順序を使用する場合、各アプリケーションPDBには固有の順序があります。1つのアプリケーションPDBのNEXTVAL疑似列を使用して、メタデータ・リンク順序を増やす場合、アプリケーション・コンテナの他のアプリケーションPDBの順序の値に影響しません。

    データ・リンク順序を使用する場合、各アプリケーションPDBはアプリケーション・ルートで同じ順序を共有します。1つのアプリケーションPDBのNEXTVAL疑似列を使用して、メタデータ・リンク順序を増やす場合、同じアプリケーション・コンテナの他のすべてのアプリケーションPDBも変更されます。

アプリケーション共通オブジェクトは、アプリケーションのインストール、アップグレードまたはパッチの一部としてのみ作成または変更できます。アプリケーションPDBは、変更を行ったアプリケーションと同期する場合にアプリケーション共通オブジェクトに変更を適用します。アプリケーション共通オブジェクトの作成、削除または変更時にアプリケーションPDBがクローズされている場合、アプリケーションPDBがオープンされてアプリケーションと同期したときに、適切な変更がアプリケーションPDBに適用されます。

アプリケーション共通オブジェクトの名前は、アプリケーション・ルートに属するアプリケーションPDB内のローカル・データベース・オブジェクトまたはCDBルート内のOracleが提供する共通オブジェクトの名前と競合することはできません。新規にオープンされたアプリケーションPDBに、名前がアプリケーション共通オブジェクトの名前と競合するローカル・データベース・オブジェクトが含まれている場合、アプリケーションPDBはRESTRICTEDモードでオープンされます。この場合は、アプリケーションPDBを通常モードでオープンする前に名前の競合を解決する必要があります。

メタデータリンク・アプリケーション共通オブジェクトについて

メタデータリンク・アプリケーション共通オブジェクトの場合、オブジェクトのメタデータはアプリケーション・ルートに1回格納されます。

アプリケーション・ルートに属する各アプリケーションPDB内のメタデータ・リンクにより、アプリケーションPDBはオブジェクト名と構造を含むオブジェクトのメタデータを共有できます。アプリケーション・ルートおよびアプリケーション・ルートに属する各アプリケーションPDBを含め、オブジェクトのデータは各コンテナに固有です。

メタデータリンク・アプリケーション共通オブジェクトに対するデータ定義言語(DDL)操作は、アプリケーションのインストール、アップグレードまたはパッチの一部としてのみアプリケーション・ルートで実行できます。ただし、データは通常のデータ操作言語(DML)の操作を使用してアプリケーションPDBで変更できます。

たとえば、複数の地域オフィスがある会社について考えます。その会社は従業員に関する情報の構造に一貫性を持たせる必要がありますが、各オフィスの従業員は異なります。この会社がアプリケーション・コンテナに人事アプリケーションを持つ場合は、地域オフィスごとに異なるアプリケーションPDBを作成し、メタデータリンク表を使用して従業員情報を格納できます。列などの表のデータ構造は、各地域オフィスのアプリケーションPDBで同じですが、従業員データは異なります。

別の例として、複数の異なるビジネスで使用されているセールス・アプリケーションを構築およびメンテナンスする会社があります。各ビジネスは、同じセールス・アプリケーションを使用しますが、各ビジネスのデータは異なります。たとえば、各ビジネスには異なる顧客がいるため、異なる顧客データがあります。各クライアントがそのアプリケーションに同じデータ構造を使用するようにするために、会社はメタデータリンク・アプリケーション共通オブジェクトを含むアプリケーション・コンテナを作成できます。セールス・アプリケーションを使用する各ビジネスには固有のアプリケーションPDBがあり、データ構造は各アプリケーションPDBで同じですが、データは異なります。

拡張データリンク・アプリケーション共通オブジェクトについて

データリンク・アプリケーション共通オブジェクトの場合は、オブジェクトのメタデータとデータの両方がアプリケーション・ルートに1回格納されます。アプリケーション・ルートに属する各アプリケーションPDB内のデータ・リンクにより、アプリケーションPDBはオブジェクトのメタデータとデータを共有できます。

データリンク・アプリケーション共通オブジェクトに対するDDL操作は、アプリケーションのインストール、アップグレードまたはパッチの一部としてのみアプリケーション・ルートで実行できます。また、データはアプリケーション・ルートでのみ通常のDML操作を使用して変更できます。データはアプリケーションPDBで変更できません。

たとえば、複数の地域オフィスがある会社について考えます。会社では、製品名や説明など、販売する製品に関する情報をすべての地域オフィスで一貫させる必要があります。この会社がアプリケーション・コンテナにセールス・アプリケーションを持つ場合は、地域オフィスごとに異なるアプリケーションPDBを作成し、データリンク表を使用して製品情報を格納できます。各アプリケーションPDBは製品情報を問い合せることができ、製品情報は各地域オフィスで一貫します。

データリンク・アプリケーション共通オブジェクトは、標準で変更のないデータにも役立ちます。たとえば、国の郵便番号を格納する表は、アプリケーション・コンテナ内のデータリンク・アプリケーション共通オブジェクトにすることができます。すべてのアプリケーションPDBは、アプリケーション・ルート内の同じ郵便番号データにアクセスします。

ノート:

データリンク・アプリケーション共通オブジェクトがプロキシPDBを使用してアプリケーション・ルート・レプリカを同期する構成の一部である場合、アプリケーション・ルートのデータリンク・オブジェクトに対するDML操作はアプリケーションのアクションの外側で行うことができますが、そのDML操作はプロキシPDBを介してアプリケーション・ルート・レプリケーションに自動的に伝播されません。DML操作をアプリケーション・ルート・レプリカに伝播する場合、アプリケーション・ルート内のデータリンク・オブジェクトに対するDML操作は、アプリケーションのインストール、アップグレードまたはパッチ適用内で行う必要があります。

拡張データリンク・アプリケーション共通オブジェクトについて

拡張データリンク・オブジェクトの場合、各アプリケーションPDBは、アプリケーション・ルートの共通データを共有しながら独自データを作成できます。アプリケーション・ルートに格納されるデータのみがすべてのアプリケーションPDBに共通です。

拡張データリンク・アプリケーション共通オブジェクトに対するDDL操作は、アプリケーションのインストール、アップグレードまたはパッチの一部としてのみアプリケーション・ルートで実行できます。ただし、データは通常のDMLの操作を使用してアプリケーション・ルートまたはアプリケーションPDBで変更できます。

たとえば、アプリケーション・コンテナ内のセールス・アプリケーションは複数のアプリケーションPDBをサポートできますが、すべてのアプリケーションPDBに出荷を目的として米国の郵便番号が必要です。この場合、郵便番号は、すべてのアプリケーションPDBからアクセスできるようにアプリケーション・ルートに格納できます。ただし、1つのアプリケーションPDBはカナダでもセールスを行い、このアプリケーションPDBは米国とカナダの郵便番号を必要とします。この1つのアプリケーションPDBは、アプリケーション・ルートではなくアプリケーションPDB内の拡張データリンク・オブジェクトにカナダの郵便番号を格納できます。

ノート:

  • 拡張データリンク・オブジェクトにすることができるデータベース・オブジェクトのタイプは、表およびビューのみです。

  • 拡張データリンク・アプリケーション共通オブジェクトがプロキシPDBを使用してアプリケーション・ルート・レプリカを同期する構成の一部である場合、アプリケーション・ルートの拡張データリンク・オブジェクトに対するDML操作はアプリケーションのアクションの外側で行うことができますが、そのDML操作はプロキシPDBを介してアプリケーション・ルート・レプリケーションに自動的に伝播されません。DML操作をアプリケーション・ルート・レプリカに伝播する場合、アプリケーション・ルート内の拡張データリンク・オブジェクトに対するDML操作は、アプリケーションのインストール、アップグレードまたはパッチ適用内で行う必要があります。

アプリケーション共通オブジェクトの制限

いくつかの制限がアプリケーション共通オブジェクトに適用されます。

アプリケーション共通オブジェクトに対する問合せでは、現在のコンテナではないコンテナからデータを返すことができます。たとえば、現在のコンテナがアプリケーション・ルートである場合、CONTAINERS句が含まれている問合せでは、アプリケーションPDBからメタデータリンク・アプリケーション共通オブジェクトのデータを返すことができます。また、現在のコンテナがアプリケーションPDBである場合、データリンク・アプリケーション共通オブジェクトおよび拡張データリンク・アプリケーション共通オブジェクトに対する問合せでは、アプリケーション・ルートにあるデータが返されます。

次のタイプの列では、データが返される問合せで、現在のコンテナではないコンテナからデータが返されません。

  • ユーザー定義型: オブジェクト型、VARRAY、REFおよびネストした表

  • Oracle提供型: ANYTYPEANYDATASET、URI型、SDO_TOPO_GEOMETRYSDO_GEORASTERおよびExpression

また、オブジェクト表およびオブジェクト・ビューに対する問合せでは、現在のコンテナではないコンテナからはデータが返されません。

アプリケーション共通オブジェクトの作成

DEFAULT_SHARING初期化パラメータが適切な値に設定されていることを確認するか、SHARING句をCREATE SQL文に含めることで、アプリケーション共通オブジェクトをアプリケーション・ルートに作成します。

アプリケーションのインストール、アップグレードまたはパッチの一部としてメタデータリンク・オブジェクト、拡張データリンクまたはデータリンク・オブジェクトをアプリケーション・ルートに作成できます。アプリケーションPDBは、アプリケーション・ルート内のアプリケーションと同期する場合にアプリケーション共通オブジェクトに変更を適用します。
  1. SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
    現在のユーザーは、データベース・オブジェクトを作成するために必要な権限を持っている必要があります。
  2. アプリケーションのインストール、アップグレードまたはパッチを開始するにはALTER PLUGGABLE DATABASE APPLICATION BEGIN文を実行します。
    たとえば、アプリケーション・インストールの一部としてアプリケーション共通オブジェクトを作成している場合は、次の形式でALTER PLUGGABLE DATABASE APPLICATION BEGIN INSTALL文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION application_name BEGIN INSTALL 'application_version_number';
  3. アプリケーション共通オブジェクトを作成し、次のいずれかの方法でその共有属性を指定します。
    • DEFAULT_SHARING初期化パラメータがアプリケーション・ルートの目的の共有属性に設定されていることを確認し、CREATE SQL文を発行してデータベース・オブジェクトを作成します。
    • CREATE SQL文を発行し、SHARING句を含めてMETADATADATAまたはEXTENDED DATAを設定します。
    SHARING句がSQL文に含まれる場合、これはDEFAULT_SHARING初期化パラメータで指定された値よりも優先されます。たとえば、DEFAULT_SHARING初期化パラメータがアプリケーション・ルートでMETADATAに設定され、データベース・オブジェクトがSHARINGDATAに設定して作成された場合、データベース・オブジェクトはデータリンク・データベース・オブジェクトとして作成されます。

    ノート:

    データベース・オブジェクトが作成された後、その共有属性は変更できません。
  4. アプリケーションのインストール、アップグレードまたはパッチを終了するにはALTER PLUGGABLE DATABASE APPLICATION END文を実行します。
    たとえば、アプリケーション・インストールの一部としてアプリケーション共通オブジェクトを作成している場合は、次の形式でALTER PLUGGABLE DATABASE APPLICATION END INSTALL文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION application_name END INSTALL 'application_version_number';

    ノート:

    application_nameおよびapplication_version_numberALTER PLUGGABLE DATABASE APPLICATION BEGIN INSTALL文とALTER PLUGGABLE DATABASE APPLICATION END INSTALL文で一致していることを確認します。
  5. アプリケーションPDBを現在のコンテナとして使用し、SYNC句を指定したALTER PLUGGABLE DATABASE APPLICATIONを発行して、これらの変更を適用する必要のあるすべてのアプリケーションPDBを同期します。

例17-9 DEFAULT_SHARING初期化パラメータの設定

この例では、DEFAULT_SHARING初期化パラメータをメモリーとSPFILEの両方でDATAに設定します。共有をサポートするデータベース・オブジェクトがアプリケーション・ルートに作成されており、SHARING句がCREATE SQL文に含まれない場合、データベース・オブジェクトはDEFAULT_SHARING初期化パラメータで指定された共有属性を使用します。

ALTER SYSTEM SET DEFAULT_SHARING=DATA SCOPE=BOTH;

例17-10 メタデータリンク・オブジェクトの作成

この例では、SHARING=METADATA句を含めることでemployees_mdメタデータリンク表を作成します。application_namesalesappであり、application_version_numberは4.2で、オブジェクトはアプリケーションのインストール時に作成されます。

ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN INSTALL '4.2';
CREATE TABLE employees_md SHARING=METADATA
    (employee_id    NUMBER(6), 
     first_name     VARCHAR2(20),
     last_name      VARCHAR2(25) CONSTRAINT emp_last_name_nn_demo NOT NULL, 
     email          VARCHAR2(25) CONSTRAINT emp_email_nn_demo     NOT NULL, 
     phone_number   VARCHAR2(20), 
     hire_date      DATE  DEFAULT SYSDATE CONSTRAINT emp_hire_date_nn_demo  NOT NULL, 
     job_id         VARCHAR2(10) CONSTRAINT     emp_job_nn_demo  NOT NULL, 
     salary         NUMBER(8,2)  CONSTRAINT     emp_salary_nn_demo  NOT NULL, 
     commission_pct NUMBER(2,2), 
     manager_id     NUMBER(6), 
     department_id  NUMBER(4), 
     dn             VARCHAR2(300), 
          CONSTRAINT emp_salary_min_demo CHECK (salary > 0), 
          CONSTRAINT emp_email_uk_demo UNIQUE (email));
ALTER PLUGGABLE DATABASE APPLICATION salesapp END INSTALL '4.2';

例17-11 データリンク・オブジェクトの作成

この例では、SHARING=DATA句を含めることでproduct_descriptions_obデータリンク表を作成します。application_namesalesappであり、application_version_numberは4.2で、オブジェクトはアプリケーションのインストール時に作成されます。

ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN INSTALL '4.2';
CREATE TABLE product_descriptions_ob SHARING=DATA     
    (product_id             NUMBER(6), 
     language_id            VARCHAR2(3), 
     translated_name        NVARCHAR2(50)   CONSTRAINT translated_name_nn NOT NULL, 
     translated_description NVARCHAR2(2000) CONSTRAINT translated_desc_nn NOT NULL);
ALTER PLUGGABLE DATABASE APPLICATION salesapp END INSTALL '4.2';

例17-12 拡張データリンク・オブジェクトの作成

この例では、EXTENDEDキーワードとSHARING句を含めることでpostalcodes拡張データリンク表を作成します。application_namesalesappであり、application_version_numberは4.2で、オブジェクトはアプリケーションのインストール時に作成されます。

ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN INSTALL '4.2';
CREATE TABLE postalcodes SHARING=EXTENDED DATA
    (code        VARCHAR2(7),
     country_id  NUMBER,
     place_name  VARCHAR2(20));
ALTER PLUGGABLE DATABASE APPLICATION salesapp END INSTALL '4.2';

例17-13 アプリケーション・ルートで共有されないオブジェクトの作成

この例では、departments_ns表を作成し、SHARING=NONE句を含めることで共有共通アプリケーション・オブジェクトではないことを指定します。作成後に、このデータベース・オブジェクトはアプリケーション・ルートでのみアクセスできます。

CREATE TABLE departments_ns SHARING=NONE
    (department_id    NUMBER(4), 
     department_name  VARCHAR2(30) CONSTRAINT  dept_name_nn  NOT NULL, 
     manager_id       NUMBER(6), 
     location_id      NUMBER(4), 
     dn               VARCHAR2(300));

ノート:

ALTER PLUGGABLE DATABASE APPLICATION BEGINおよびEND文は、共有共通オブジェクトではないオブジェクトの作成時には不要です。ただし、ALTER PLUGGABLE DATABASE APPLICATION BEGIN文とEND文の間で共有されないオブジェクトを作成する場合、オブジェクトはアプリケーションと同期するアプリケーションPDBに作成されます。

アプリケーション共通オブジェクトに対するDML文の発行

メタデータリンク、データリンクおよび拡張データリンクのアプリケーション共通オブジェクトに対するデDML文の発行のルールは異なります。

この項では、次の項目について説明します。

メタデータリンク共通オブジェクトに対するDMLの発行

メタデータリンク・アプリケーション・オブジェクトには、通常どおりDMLを発行できます。

メタデータリンク・アプリケーション共通オブジェクトの場合、オブジェクトの定義はすべてのアプリケーションPDBで同じですが、データは異なります。ユーザーとアプリケーションは、通常のデータベース・オブジェクトと同じ方法でこれらのオブジェクトに対してDML文を発行できます。DMLは現在のコンテナにのみ作用します。

この項では、次の項目について説明します。

CONTAINERS句を使用した問合せ

メタデータリンク・オブジェクトの場合は、CONTAINERS句を使用してアプリケーション・コンテナ内のすべてのPDBに対して表またはビューを問い合せることができます。

メタデータリンク・オブジェクトの場合は、アプリケーション・ルートでDMLを実行するときにCONTAINERS句が役に立ちます。問合せによってUNION ALLが実行されると、ルートとオープンしているすべてのアプリケーションPDB (RESTRICTEDモードのPDBを除く)のオブジェクトからすべての行が戻されます。

PDBのサブセットを問い合せるには、述語にCON_IDまたはCON$NAMEを指定します。問合せ対象の表またはビューにCON_ID列が含まれていない場合、問合せはCON_ID列を問合せ結果に追加し、与えられた行が表すデータがあるコンテナを識別します。

前提条件

次の前提条件に注意してください。

  • アプリケーション・コンテナのデータを問い合せるには、共通ユーザーとしてアプリケーション・ルートに接続する必要があります。

  • 表またはビューは、アプリケーション・コンテナのアプリケーション・ルートとすべてのPDBに存在する必要があります。

  • 表またはビューは、自分のスキーマ内に存在している必要があります。schemaを指定する必要はありませんが、指定する場合は自分のスキーマを指定する必要があります。

アプリケーション・コンテナのメタデータリンク・オブジェクトを問い合せるには:

  1. アプリケーション共通ユーザーとしてアプリケーション・ルートにログインします。

  2. SELECT文にCONTAINERS句を指定します。

    たとえば、次の文はルートとすべてのアプリケーションPDBのsh.customers表の行数をカウントします(出力例を含む)。

    
    SELECT c.CON_ID, COUNT(*) 
    FROM   CONTAINERS(sh.customers) c
    GROUP BY c.CON_ID
    ORDER BY 1;
    
        CON_ID   COUNT(*)
    ---------- ----------
             3      20002
             6        426
             8       7232
デフォルトのコンテナまたはDMLの設定

メタデータリンク・オブジェクトのCONTAINERS_DEFAULT属性を設定すると、アプリケーション・ルートで発行されるDMLがデフォルトでCONTAINERS句でラップされます。

ALTER TABLE文またはALTER VIEW文にENABLE CONTAINERS_DEFAULTを設定します。DBA_TABLESおよびDBA_VIEWSビューのCONTAINERS_DEFAULT列は、デフォルトでCONTAINERS句に対してデータベース・オブジェクトが有効になるかどうかを示します。

メタデータリンク表またはビューに関するDMLのデフォルト・コンテナを設定するには:

  1. アプリケーション共通ユーザーとしてアプリケーション・ルートにログインします。

  2. アプリケーション・ルートでENABLE CONTAINERS_DEFAULT句を指定したALTER TABLE文またはALTER VIEW文を発行します。

    次の文は、sh.customersのデフォルト・コンテナを設定します。

    ALTER TABLE sh.customers ENABLE CONTAINERS_DEFAULT;

    この属性を設定した後、アプリケーション・ルートで発行される問合せとDML文はsh.customersに対してデフォルトでCONTAINERS句を使用します。

データリンク共通オブジェクトに対するDMLの発行

データリンク・アプリケーション・オブジェクトの場合は、アプリケーション・ルートで通常どおりDMLを発行します。拡張データリンク・アプリケーション・オブジェクトの場合は、アプリケーション・ルートおよびアプリケーションPDBで通常どおりDMLを発行します。

データリンク・アプリケーション・オブジェクトの場合、アプリケーション・ルートのDMLはアプリケーション・コンテナのすべてのPDBがアクセスできるデータに作用します。アプリケーションPDBのデータリンク・アプリケーション・オブジェクトに対してDMLを発行することはできません。

拡張データリンク・アプリケーション・オブジェクトの場合、アプリケーション・ルートのDMLはアプリケーション・コンテナのすべてのPDBがアクセスできるデータに作用します。アプリケーションPDBのDMLは、そのアプリケーションPDBに固有のデータにのみ作用します。

データリンクまたは拡張データリンク・オブジェクトを含むアプリケーション・ルートがあるとします。また、このルートはプロキシPDBと同期されたアプリケーション・ルート・レプリカのマスターであるとします。この場合、アプリケーションのインストール、アップグレードまたはパッチ適用中にDMLが実行されると、DMLはレプリカとのみ同期します。特に、ルートでのDMLはALTER PLUGGABLE DATABASE APPLICATION ... {BEGIN|END}文の間で実行される必要があります。他のDMLは、現在のルートにのみ適用され、ルート・レプリカとは同期されません。

アプリケーション・ルート・レプリカ構成の一部ではないアプリケーション共通オブジェクトのDMLを発行するには:

  1. データベース・オブジェクトに対してDML文を発行するために必要な権限を持つユーザーとして、アプリケーション・コンテナ内の該当するコンテナに接続します。

  2. DML文を通常どおりに発行します。

アプリケーション・ルート・レプリカ構成の一部ではないデータリンク・オブジェクトまたは拡張データリンク・オブジェクトのDMLを発行するには:

  1. SQL*Plusで、現在のコンテナが構成のアプリケーション・ルート・レプリカのマスター・アプリケーション・ルートであることを確認します。

    現在のユーザーは、データベース・オブジェクトに対してDML文を発行するために必要な権限を持っている必要があります。

  2. アプリケーションのインストール、アップグレードまたはパッチを開始するためにALTER PLUGGABLE DATABASE APPLICATION ... BEGIN文を実行します。

    アプリケーション・アップグレードの一部としてアプリケーション共通オブジェクトを変更する場合は、次の形式でアップグレード文を発行します。

    ALTER PLUGGABLE DATABASE APPLICATION application_name BEGIN UPGRADE 
      'application_start_version_number' TO 
      'application_end_version_number';

    たとえば、application_namesalesappapplication_start_version_numberが4.2、application_end_version_numberが4.3の場合は、次の文を実行します。

    ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN UPGRADE '4.2' TO '4.3';
  3. データリンク・アプリケーション共通オブジェクトに対してDML文を発行します。

  4. ALTER PLUGGABLE DATABASE APPLICATION ... END文を実行します。

    たとえば、アプリケーション・アップグレードの一部としてアプリケーション共通オブジェクトを変更する場合は、次の形式で文を実行します。

    ALTER PLUGGABLE DATABASE APPLICATION application_name END UPGRADE 
      TO 'application_end_version_number';

    たとえば、application_namesalesappapplication_start_version_numberが4.2、application_end_version_numberが4.3の場合は、次の文を実行します。

    ALTER PLUGGABLE DATABASE APPLICATION salesapp END UPGRADE TO '4.3';

    ノート:

    application_nameおよびapplication_end_version_numberALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE文とALTER PLUGGABLE DATABASE APPLICATION END UPGRADE文で一致していることを確認します。
  5. これらの変更を適用する必要のあるすべてのアプリケーションPDBを同期するには、アプリケーションPDBが現在のコンテナであるときに、SYNC句を指定したALTER PLUGGABLE DATABASE APPLICATION文を発行します。

DDL文を使用したアプリケーション共通オブジェクトの変更

特定のDDL文でアプリケーション・ルート内のアプリケーション共通オブジェクトを変更する場合は、ALTER PLUGGABLE DATABASE APPLICATION BEGIN文とALTER PLUGGABLE DATABASE APPLICATION END文の間でオブジェクトを変更する必要があり、変更を適用するためにアプリケーションPDBがアプリケーションと同期する必要があります。

アプリケーション・ルート内のメタデータリンク・オブジェクトまたはデータリンク・オブジェクトを変更できます。ALTERRENAMEまたはDROP SQL文をデータベース・オブジェクトに対して実行してDDL変更を実行します。
  1. SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
    現在のユーザーは、データベース・オブジェクトに対する計画的な変更を行うために必要な権限を持っている必要があります。
  2. アプリケーションのインストール、アップグレードまたはパッチを開始するにはALTER PLUGGABLE DATABASE APPLICATION BEGIN文を実行します。
    たとえば、アプリケーション・アップグレードの一部としてアプリケーション共通オブジェクトを変更している場合は、次の形式でALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION application_name BEGIN UPGRADE 'application_start_version_number' TO 'application_end_version_number';
    たとえば、application_namesalesappapplication_start_version_numberが4.2、application_end_version_numberが4.3の場合は、次の文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN UPGRADE '4.2' TO '4.3';
  3. DDL文でアプリケーション共通オブジェクトを変更します。
    たとえば、ALTER TABLE文は列を表に追加できます。
  4. アプリケーションのインストール、アップグレードまたはパッチを終了するにはALTER PLUGGABLE DATABASE APPLICATION END文を実行します。
    たとえば、アプリケーション・アップグレードの一部としてアプリケーション共通オブジェクトを変更している場合は、次の形式でALTER PLUGGABLE DATABASE APPLICATION END UPGRADE文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION application_name END UPGRADE TO 'application_end_version_number';
    たとえば、application_namesalesappapplication_end_version_numberが4.3の場合は、次の文を実行します。
    ALTER PLUGGABLE DATABASE APPLICATION salesapp END UPGRADE TO '4.3';

    ノート:

    application_nameおよびapplication_end_version_numberALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE文とALTER PLUGGABLE DATABASE APPLICATION END UPGRADE文で一致していることを確認します。
  5. アプリケーションPDBを現在のコンテナとして使用し、SYNC句を指定したALTER PLUGGABLE DATABASE APPLICATIONを発行して、これらの変更を適用する必要のあるすべてのアプリケーションPDBを同期します。

アプリケーション・コンテナ内のコンテナに対するDML文の発行

アプリケーション・ルートで発行されるDML文では、アプリケーション・コンテナ内の1つ以上のコンテナを変更できます。また、DML文に対して1つ以上のデフォルト・コンテナ・ターゲットを指定できます。

この項では、次の項目について説明します。

アプリケーション・コンテナ内のコンテナに対するDML文の発行について

DML文は、アプリケーション・コンテナ内の複数のコンテナ内のデータベース・オブジェクトに影響することがあります。

アプリケーション・ルートで、CONTAINERS句を含む単一のDML文は、アプリケーション・コンテナ内の1つ以上のコンテナ内の表またはビューを変更できます。CONTAINERS句を使用するには、変更される表またはビューをCONTAINERS句に指定し、コンテナをWHERE句に指定します。INSERT VALUES文でターゲット・コンテナを指定するには、VALUES句にCON_ID値を指定します。また、UPDATE文またはDELETE文でターゲット・コンテナを指定するには、WHERE句にCON_ID述語を指定します。

たとえば、次のDML文はコンテナ内のsales.customers表を7または8CON_IDで更新します。
UPDATE CONTAINERS(sales.customers) ctab 
   SET ctab.city_name='MIAMI' 
   WHERE ctab.CON_ID IN(7,8) AND
   CUSTOMER_ID=3425;

WHERE句のCON_IDに指定する値は、現在のアプリケーション・コンテナ内のコンテナに対するものである必要があります。

DML操作のデフォルト・ターゲット・コンテナを指定できます。DML文でWHERE句にCON_IDの値が指定されていない場合、DML操作のターゲット・コンテナはアプリケーション・ルートのデータベース・プロパティCONTAINERS_DEFAULT_TARGETで指定されたコンテナです。アプリケーション・ルートで発行した場合、次のDML文はアプリケーション・コンテナのデフォルト・ターゲット・コンテナを変更します。

UPDATE CONTAINERS(sales.customers) ctab 
   SET ctab.city_name='MIAMI' 
   WHERE CUSTOMER_ID=3425;
デフォルトでは、アプリケーション・コンテナ内のデフォルト・ターゲット・コンテナにはすべてのアプリケーションPDBが含まれますが、そのアプリケーション・ルートまたはアプリケーション・シードは含まれません。次の問合せを実行することで、アプリケーション・コンテナのデフォルト・ターゲット・コンテナを決定できます。
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='CONTAINERS_DEFAULT_TARGET';

また、アプリケーション・ルートの表またはビューに対してCONTAINERS_DEFAULT属性を有効にできます。この属性が有効になっている場合、CONTAINERS句はデフォルトでデータベース・オブジェクトに対する問合せおよびDML文に使用され、CONTAINERS句はSQL文で指定する必要がありません。アプリケーション・ルートの表またはビューに対してCONTAINERS_DEFAULT属性を有効にするには、ENABLE CONTAINERS_DEFAULTを指定したALTER TABLEまたはALTER VIEW文を実行します。

CONTAINERS句には、次の制限事項が適用されます。

  • CONTAINERS DEFAULT TARGET句はSELECT文に影響しません。

  • INSERTのターゲットがCONTAINERS()内にあるSELECT文を使用したINSERT文はサポートされません。

  • INSERTのターゲットがCONTAINERS()内にある、複数表に対するINSERT文はサポートされません。

  • CONTAINERS句を使用するDML文では、データベース・リスナーがTCP (IPCではなく)を使用して構成され、PORT値およびHOST値がPORT句およびHOST句を使用して各ターゲットPDBに指定されている必要があります。

アプリケーション・コンテナにおけるDML文のデフォルト・コンテナの指定

アプリケーション・コンテナ内のDML文のデフォルト・コンテナを指定するには、CONTAINERS DEFAULT TARGET句を指定したALTER PLUGGABLE DATABASE文を発行します。

WHERE句でコンテナを指定せずにDML文がアプリケーション・ルートで発行されている場合、DML文はアプリケーション・コンテナのデフォルト・コンテナに影響します。デフォルト・コンテナには、アプリケーション・ルートまたはアプリケーションPDBを含む、アプリケーション・コンテナ内の任意のコンテナを指定できます。1つのデフォルトのコンテナのみを使用できます。
  1. SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
    現在のユーザーには、ALTER PLUGGABLE DATABASE権限が共通して付与されている必要があります。
  2. CONTAINERS DEFAULT TARGET句を指定してALTER PLUGGABLE DATABASE文を実行します。

例17-14 アプリケーション・コンテナ内のDML文のデフォルト・コンテナの指定

この例では、APDB1がアプリケーション・コンテナ内のDML文のデフォルト・コンテナであることを指定します。

ALTER PLUGGABLE DATABASE CONTAINERS DEFAULT TARGET = (APDB1);

例17-15 デフォルト・コンテナのクリア

この例は、デフォルト・コンテナ設定をクリアしています。設定されていない場合、デフォルト・コンテナはアプリケーション・ルートです。

ALTER PLUGGABLE DATABASE CONTAINERS DEFAULT TARGET = NONE;

コンテナ・マップを使用したPDBでのパーティション化

コンテナ・マップにより、データが表レベルで物理的にパーティション化されていない場合にデータをアプリケーションPDBレベルでパーティション化できます。

この項では、次の項目について説明します。

コンテナ・マップについて

コンテナ・マップは、アプリケーション・ルートで定義されているパーティション化されたマップ表を指定するデータベース・プロパティです。

コンテナ・マップを使用して、メタデータリンク・オブジェクトのデータをパーティション化します。コンテナ・マップは、よく使用される列に基づいてアプリケーションPDB内のデータをパーティション化します。

たとえば、各アプリケーションPDBに異なるデータを格納する、countries_mlt (cname列を使用)というメタデータリンク表を作成する場合があります。pdb_map_tblというマップ表がcname列でリスト別にパーティション化します。amer_pdbeuro_pdbおよびasia_pdbの各パーティションがアプリケーションPDBの名前に対応します。

コンテナ・マップは、共通オブジェクトの列に論理パーティション・キーを定義できます。コンテナ・マップに基づいてコンテナが内部的に解決されるため、このマッピングでは、CON_ID述語を使用して問合せを定義するか、または問合せでCONTAINERS句を使用するための要件が削除されます。

一部のタイプの行ベース統合では、複数のテナントを含む単一のPDBでテナントIDを使用します。コンテナ・マップは、テナントごとに異なるPDBを使用する構成に移行する場合に役立ちます。

この項では、次の項目について説明します。

マップ・オブジェクト

マップ・オブジェクトはパーティション化された表です。

マップ表内のパーティションの名前は、アプリケーション・コンテナ内のアプリケーションPDBの名前と一致します。メタデータリンク・オブジェクトは表レベルで物理的にパーティション化されませんが、コンテナ・マップで使用されるパーティション化戦略を使用して問い合せることができます。

マップ表をメタデータリンク表に関連付けるには、アプリケーション・ルートに接続しているときに、ALTER PLUGGABLE DATABASE ... CONTAINER_MAPでマップ表を指定します。1つのアプリケーション・コンテナに複数のコンテナ・マップは作成できません。コンテナ・マップはCDBルートで作成できません。

ノート:

  • データは、マップ・オブジェクトに定義されているパーティションと整合性のある方法で、PDB表にロードされる必要があります。

  • アプリケーション・コンテナ内のアプリケーションPDBが変更された場合、マップ・オブジェクトはそれらの変更に対応して自動的に同期されません。たとえば、マップ・オブジェクトで参照されているアプリケーションPDBが、切断、名前変更または削除されていることがあります。そのような変更を反映するには、マップ・オブジェクトを手動で更新する必要があります。

Oracle Database 18c以降は、CONTAINERS()問合せでマップを使用するために、マップ表のパーティション化列がメタデータリンク表の列と一致している必要はありません。表sh.salesがコンテナ・マップpdb_map_tblに対して有効で、cnameがマップ表のパーティション化列であるとします。sh.salescname列が含まれていない場合でも、マップ表は次の問合せを適切なPDBにルーティングします: SELECT * FROM CONTAINERS(sh.sales) WHERE cname = 'US' ORDER BY time_id

リスト・パーティション化されたコンテナ・マップ: 例

この例では、地理的地域のデータを格納するPDBに問合せをルーティングするコンテナ・マップが使用されます。

次のアプリケーション・ルート図は、マップ・オブジェクト、メタデータリンク表、およびメタデータリンク表に対する問合せを示しています。問合せは適切なアプリケーションPDBで実行されます。

図17-3 コンテナ・マップ

図17-3の説明が続きます
「図17-3 コンテナ・マップ」の説明

図には、アプリケーション・コンテナにAMEREUROおよびASIAという3つのアプリケーションPDBがあることが示されています。PDBには、対応する地域のデータが格納されます。oe.cmtbというメタデータリンク表は、アプリケーションに関する情報を格納します。この表にはCOUNTRY列があります。このパーティション化戦略のために、リスト別のパーティションを使用して、各地域のパーティションを作成するマップ・オブジェクトを作成します。国の値(図に示されている問合せではGERMANY)によって、地域(ここではEURO)が決定されます。

関連項目:

この例の詳細は説明は、「コンテナ・マップの作成」を参照してください

レンジ・パーティション化されたコンテナ・マップ: 例

この例では、特定の部門のデータを格納するPDBに問合せをルーティングするコンテナ・マップが使用されます。

レンジ・パーティション化された表をマップ・オブジェクトに使用する別の例について考えます。次のSQL文はアプリケーション・ルート内にマップ・オブジェクトを作成します。

CREATE TABLE app_con_admin.conmap (
   department_id NUMBER NOT NULL)
PARTITION BY RANGE (department_id) (
PARTITION apppdb1 VALUES LESS THAN (100),
PARTITION apppdb2 VALUES LESS THAN (200),
PARTITION apppdb3 VALUES LESS THAN (300));
このマップ・オブジェクトは、よく使用される列department_idに基づいてアプリケーションPDB apppdb1apppdb2およびapppdb3のデータをパーティション化します。次のSQL文はCONTAINER_MAPデータベース・プロパティをアプリケーション・ルートのapp_con_admin.conmap表に設定します。
ALTER PLUGGABLE DATABASE SET CONTAINER_MAP='app_con_admin.conmap';
コンテナ・マップを使用する問合せは、CONTAINERS句を使用する問合せと同様の結果を生成します。たとえば、次の問合せは同様の結果を返します。
SELECT employee_id 
FROM   CONTAINERS(hr.employees) 
WHERE  department_id = 10 
AND    CON_ID IN (44); 

SELECT employee_id 
FROM   hr.employees 
WHERE  department_id = 10;

CONTAINERSを指定した最初の問合せに示されているように、問合せが単一のアプリケーションPDBにのみ関連する場合、問合せではこのアプリケーションPDBのコンテナIDをWHERE句に指定する必要があります。この要件によって、アプリケーション変更が生じることがあります。

2番目の問合せでは、CONTAINERS句のかわりにコンテナ・マップを使用しています。2番目の問合せでは、コンテナ・マップが問合せを適切なアプリケーションPDBに送信するためコンテナを指定しません。通常、コンテナ・マップを使用する問合せはCONTAINERS句を使用する問合せよりも効率的です。

コンテナ・マップは、ALTER DATABASEシステム権限を持つ共通ユーザーが作成する必要があります。問合せは、コンテナ・マップで有効にされているオブジェクトに対して実行されます。問合せ権限は、オブジェクトに付与されている権限によって決定されます。

コンテナ・マップの作成

マップ・オブジェクトを作成し、CONTAINER_MAPデータベース・プロパティをマップ・オブジェクトに設定することで、コンテナ・マップを作成します。

マップ・オブジェクトは、各パーティション名がアプリケーション・コンテナ内のアプリケーションPDBの名前と一致するパーティション化された表です。

前提条件

コンテナ・マップを作成するには、次の前提条件を満たしている必要があります。

  • コンテナ・マップを作成する前に、適切なPDBのあるアプリケーション・コンテナがCDBに存在している必要があります。

  • アプリケーション・コンテナには、少なくとも1つのアプリケーションがインストールされている必要があります。

コンテナ・マップを作成するには:

  1. SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。

  2. CONTAINER_MAPデータベース・プロパティをマップ・オブジェクトに設定します。

    次の文で、map_table_schemaを表の所有者で置換し、map_table_nameを表の名前で置換します。

    ALTER DATABASE SET CONTAINER_MAP =  'map_table_schema.map_table_name';
  3. アプリケーションのインストール、アップグレードまたはパッチ適用を開始します。

  4. コンテナ・マップで使用されるメタデータリンク表が存在しない場合、それを作成します。

  5. ALTER TABLE ... ENABLE CONTAINER_MAP文を発行することで、問い合せる表のコンテナ・マップを有効にします。

  6. ALTER TABLE ... ENABLE CONTAINERS_DEFAULT文を発行することで、CONTAINERS句に対して問い合せる表が有効になっていることを確認します。

  7. 前に開始したアプリケーションのインストール、アップグレードまたはパッチ適用が終了します。

例17-16 コンテナ・マップの作成と使用

この例では、コンテナ・マップを使用する単純なアプリケーションを作成します。アプリケーション・コンテナにAMEREUROおよびASIAという3つのアプリケーションPDBがあることを想定します。アプリケーションPDBは異なる地域(それぞれアメリカ、ヨーロッパおよびアジア)のデータを格納します。メタデータリンク表はアプリケーションに関する情報を格納し、COUNTRY列があります。このパーティション化戦略では、リストによるパーティションを使用して、各地域のパーティションを作成するマップ・オブジェクトを作成し、国値を使用して地域を決定します。

  1. SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。

  2. マップ・オブジェクトを作成します。

    CREATE TABLE salesadm.conmap (country VARCHAR2(30) NOT NULL)
    PARTITION BY LIST (country) (
      PARTITION AMER VALUES ('US','MEXICO','CANADA'),
      PARTITION EURO VALUES ('UK','FRANCE','GERMANY'),
      PARTITION ASIA VALUES ('INDIA','CHINA','JAPAN')
    );
    
  3. CONTAINER_MAPデータベース・プロパティをマップ・オブジェクトに設定します。

    ALTER PLUGGABLE DATABASE SET CONTAINER_MAP='salesadm.conmap';
  4. アプリケーションのインストールを開始します。

    ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN INSTALL '1.0';
  5. コンテナ・マップを使用して問い合せられるメタデータリンク表を作成します。

    CREATE TABLE oe.cmtb SHARING=METADATA (
      value   VARCHAR2(30),
      country VARCHAR2(30));
  6. 問い合せる表に対してコンテナ・マップを有効にします。

    ALTER TABLE oe.cmtb ENABLE CONTAINER_MAP;
  7. CONTAINERS句に対して問い合せる表が有効になっていることを確認します。

    ALTER TABLE oe.cmtb ENABLE CONTAINERS_DEFAULT;
  8. アプリケーションのインストールを終了します。

    ALTER PLUGGABLE DATABASE APPLICATION salesapp END INSTALL '1.0';
  9. セッションを各アプリケーションPDBに切り替えて同期します。

    ALTER SESSION SET CONTAINER=amer;
    ALTER PLUGGABLE DATABASE APPLICATION salesapp SYNC;
    
    ALTER SESSION SET CONTAINER=euro;
    ALTER PLUGGABLE DATABASE APPLICATION salesapp SYNC;
    
    ALTER SESSION SET CONTAINER=asia;
    ALTER PLUGGABLE DATABASE APPLICATION salesapp SYNC;
  10. パーティション化戦略に基づいて、各アプリケーションPDBのoe.cmtb表に値を挿入します。

    ALTER SESSION SET CONTAINER=amer;
    INSERT INTO oe.cmtb VALUES ('AMER VALUE','US');
    INSERT INTO oe.cmtb VALUES ('AMER VALUE','MEXICO');
    INSERT INTO oe.cmtb VALUES ('AMER VALUE','CANADA');
    COMMIT;
    
    ALTER SESSION SET CONTAINER=euro;
    INSERT INTO oe.cmtb VALUES ('EURO VALUE','UK');
    INSERT INTO oe.cmtb VALUES ('EURO VALUE','FRANCE');
    INSERT INTO oe.cmtb VALUES ('EURO VALUE','GERMANY');
    COMMIT;
    
    ALTER SESSION SET CONTAINER=asia;
    INSERT INTO oe.cmtb VALUES ('ASIA VALUE','INDIA');
    INSERT INTO oe.cmtb VALUES ('ASIA VALUE','CHINA');
    INSERT INTO oe.cmtb VALUES ('ASIA VALUE','JAPAN');
    COMMIT;
  11. セッションをアプリケーション・ルートに切り替えて、コンテナ・マップを使用してデータを問い合せます。

    ALTER SESSION SET CONTAINER=sales;
    
    SELECT value FROM oe.cmtb WHERE country='MEXICO';
    
    SELECT value FROM oe.cmtb WHERE country='GERMANY';
    
    SELECT value FROM oe.cmtb WHERE country='JAPAN';

    最初の問合せの出力はAMER VALUE、2番目の問合せの出力はEURO VALUE、3番目の問合せの出力はASIA VALUEである必要があります。これらの値は、コンテナ・マップが正常に動作していることを示します。