44 SQL*Plusを使用したアプリケーション・コンテナの管理

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

注意:

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

44.1 SQL*Plusを使用したアプリケーション・コンテナの管理について

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

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

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

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

管理タスク 説明 詳細情報

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

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

Oracle Database概要

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

現在のコンテナがCDBルートである共通ユーザーは、CDBルートに接続されるアプリケーション・コンテナを作成できます。これを行うには、CREATE PLUGGABLE DATABASE文にAS APPLICATION CONTAINER句を含めます。

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

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

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

「SQL*Plusを使用したPDBの作成および削除」

コンテナの切替え

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

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

ALTER SYSTEM SET文の発行

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

「CDBにおけるALTER SYSTEM SET文の使用方法」

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

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

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

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

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

管理タスク 説明 詳細情報

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

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

SQL*Plusを使用したCDB内のコンテナへのアクセス

ALTER PLUGGABLE DATABASE文の発行

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

「CDBの変更」

「PDBの変更」

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

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

「PDBのオープン・モードの変更」

ALTER SYSTEM文の発行

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

「CDBにおけるALTER SYSTEM SET文の使用方法」

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

表領域の管理

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

「CDB内表領域の管理」

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

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

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

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

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

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

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

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

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

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

注意:

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

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

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

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

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

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

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

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

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

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

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

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

関連トピック

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

アプリケーション・コンテナでは、アプリケーションは名前付きのバージョン管理されたアプリケーション・メタデータおよび共通データのセットです。通常のアプリケーションは、アプリケーション共通ユーザーおよびアプリケーション共通オブジェクトをインストールします。

アプリケーション・コンテナ内では、アプリケーションはアプリケーション・ルートに格納されている名前付きのバージョン管理されたアプリケーション共通オブジェクトのセットです。このコンテキストでは、"アプリケーション"は"アプリケーション・バックエンド"を意味します。アプリケーション共通オブジェクトには、ユーザー・アカウント、表、パッケージなどが含まれます。アプリケーションは、アプリケーション・ルートに属するアプリケーションPDBと共有できます。

アプリケーション・ルート内でアプリケーションをインストール、アップグレードおよびパッチ適用できます。アプリケーションをインストール、アップグレードまたはパッチ適用する場合は、ALTER PLUGGABLE DATABASE ... BEGIN文を発行して操作を開始し、ALTER PLUGGABLE DATABASE ... END文を発行して操作を終了する必要があります。これらの文は、同じユーザー・セッションまたは別のユーザー・セッションで発行できます。

アプリケーション変更がこの方法で実行された場合、アプリケーションPDBは変更を適用するためにアプリケーション・ルートのアプリケーションと同期できます。アプリケーション・コンテナは、アプリケーションのバージョンとアプリケーションのパッチも管理します。

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

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

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

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

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

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

  2. アプリケーション・ルートにアプリケーションをインストールします。

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

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

  4. アプリケーションをインストールする必要のある各アプリケーションPDBをアプリケーション・ルート内のアプリケーションと同期します。

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

  6. アプリケーション・ルートでアプリケーションをアップグレードおよびパッチ適用することで、アプリケーションをメンテナンスします。

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

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

注意:

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

関連項目:

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

アプリケーション・モジュール名は、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のデフォルト設定を利用せずに、各セッションで明示的にモジュール名を同じ値に設定する必要があります。

例44-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パッケージおよびタイプ・リファレンス』を参照してください。

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

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

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

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

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

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

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

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

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

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

  1. SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
  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を同期します。

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

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

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

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

アプリケーション・ルートのみでアプリケーションをアップグレードすると、アプリケーションと同期したときにアプリケーションPDBによってアップグレードの変更が適用されます。アプリケーションPDBは、SYNC句を指定したALTER PLUGGABLE DATABASE文を実行することでアプリケーションと同期します。アップグレードは、スクリプト、SQL文およびグラフィカル・ユーザー・インタフェース・ツールの1つ以上を使用して実行できます。

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

アプリケーションがアップグレードされると、Oracle Databaseによってアプリケーション・ルートのクローンが自動的に作成されます。アップグレード操作中、アプリケーションPDBはクローンを指しています。アップグレード操作中、アプリケーションは実行を継続します。アプリケーションPDBは、メタデータリンクおよび拡張データリンクの表およびビューに対してDML操作を実行でき、アプリケーションPDBはメタデータリンク・オブジェクト、拡張データリンク・オブジェクトおよびデータリンク・オブジェクトを問い合せることができます。アップグレード操作の完了後に、アプリケーション・ルート・クローンは残り、クローン内のアプリケーションのバージョンを使用するアプリケーションPDBを引き続きサポートします。アップグレードしたアプリケーションPDBは、アップグレードされたアプリケーション・ルートを指しています。アップグレードしないアプリケーションPDBはクローンの使用を継続でき、アプリケーション・ルートに接続されているアプリケーションPDBもクローンと同じアプリケーション・バージョンを使用できます。

図44-1にアップグレード・プロセスを示します。

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

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

注意:

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

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

アプリケーション・コンテナ内のアプリケーションをアップグレードするには、ALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE文を実行してアップグレードを開始し、ALTER PLUGGABLE DATABASE APPLICATION END UPGRADE文を実行してアップグレードを終了します。アップグレードに関連するアプリケーションの変更は、アプリケーション・ルートのアプリケーションと同期されるアプリケーションPDBに伝播されます。

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

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

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

  1. SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
  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を同期します。

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

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

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

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

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

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

注意:

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

アプリケーション・コンテナ内のアプリケーションにパッチ適用するには、ALTER PLUGGABLE DATABASE APPLICATION BEGIN PATCH文を実行してパッチ適用操作を開始し、ALTER PLUGGABLE DATABASE APPLICATION END UPGRADE文を実行してパッチ適用操作を終了します。パッチ適用に関連するアプリケーションの変更は、アプリケーション・ルート内のアプリケーションと同期されるアプリケーション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を同期します。

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

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

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

既存の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を作成します。

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

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

Oracle Database 12cリリース2 (12.2) CDBが存在する必要があります。
  1. Oracle Database 12cリリース2 (12.2) 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を作成します。
44.3.5.3 既存のPDBを使用したアプリケーションPDBの作成

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

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

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

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

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

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

ALTER PLUGGABLE DATABASE APPLICATION application_name SYNC;

application_nameのアプリケーションの名前を入力します。

アプリケーション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が暗黙的なアプリケーションの実際の名前に自動的に変換します。

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

例44-2 アプリケーションPDBでの特定のアプリケーションの同期

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

ALTER PLUGGABLE DATABASE APPLICATION salesapp SYNC;

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

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

ALTER PLUGGABLE DATABASE APPLICATION ALL SYNC;

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

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

ALTER PLUGGABLE DATABASE APPLICATION APP$CON SYNC;

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

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

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

プロキシPDBは、アプリケーション・ルートに基づいてアプリケーション・ルートとレプリカを同期できます。複数のアプリケーション・コンテナに同じアプリケーションがある場合は、この手法を使用して、すべてのアプリケーション・コンテナ内のアプリケーションの同期を維持できます。アプリケーション・ルートとアプリケーション・ルート・レプリカは、異なるCDB内に存在することができます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      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を作成します。

      たとえば、CDBシードから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. 次の文でCDBシードからアプリケーション・コンテナを作成します。

      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 prxy AS PROXY FROM depappcon@depappcon
         FILE_NAME_CONVERT = ('/disk2/oracle/dbs/depsappcon/', '/disk1/oracle/dbs/prxy/');
    4. プロキシPDBをオープンします。

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

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

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

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

      たとえば、CDBシードから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=prxy;
    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表に追加されたため、アプリケーション・アップグレード内の変更が出力に反映されます。

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

アプリケーションの互換バージョンは、アプリケーション・コンテナに属するアプリケーション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はアプリケーションの名前です。現在のバージョンは、アプリケーション・ルート内のアプリケーションのバージョンです。

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

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

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

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

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

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

ALTER PLUGGABLE DATABASE APPLICATION salesapp SET COMPATIBILITY VERSION CURRENT;

関連項目:

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

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

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を同期します。

例44-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ユーティリティ』を参照してください

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

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

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

アプリケーション・ルートからアプリケーションをアンインストールするには、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レベルで構成する必要があります。

注意:

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

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

アプリケーション・コンテナからアプリケーションをアンインストールするには、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を同期します。

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

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

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

アプリケーション共通オブジェクトは、アプリケーション・ルートに作成され、アプリケーション・ルートに属するアプリケーションPDBと共有されています。アプリケーション共通オブジェクトには、メタデータリンク、データリンクおよび拡張データリンクの3種類があります。

次のタイプのデータベース・オブジェクトをアプリケーション共通オブジェクトにすることができます。

  • アナリティック・ビュー

  • 属性ディメンション

  • ディレクトリ

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

  • 階層

  • Javaクラス、Javaリソース、Javaソース

  • パッケージ

  • オブジェクト表

  • オブジェクト・タイプ

  • オブジェクト・ビュー

  • 順序

  • ストアド・ファンクション

  • ストアド・プロシージャ

  • シノニム

  • 表(一時表を含む)

  • トリガー

  • ビュー

これらのタイプのデータベース・オブジェクトは、現在のコンテナがアプリケーション・ルートのときにCREATE文を発行し、それに対して共有属性を指定することで、アプリケーション共通オブジェクトとして作成できます。共有属性は、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操作は、アプリケーションのインストール、アップグレードまたはパッチ適用内で行う必要があります。

関連トピック

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

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

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

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

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

  • 次のOracle提供のタイプ: ANYTYPEANYDATASET、URIタイプ、SDO_TOPO_GEOMETRYSDO_GEORASTERおよびExpression

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

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

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を同期します。

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

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

ALTER SYSTEM SET DEFAULT_SHARING=DATA SCOPE=BOTH;

例44-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';

例44-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';

例44-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';

例44-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に作成されます。

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

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

アプリケーション共通オブジェクトに対してDML文を発行する場合は、次のルールが適用されます。

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

    メタデータリンク・オブジェクトの場合、アプリケーション・ルートでDML文を実行するときは、CONTAINERS句が役に立ちます。この句では、アプリケーション・コンテナ内のすべてのアプリケーションPDBに対して、指定した表またはビューのデータを問い合せることができます。また、アプリケーション・コンテナ内のすべてのアプリケーションPDBで指定した表またはビューのデータに対してDMLの変更を実行できます。コンテナ句を使用するには、次の例のようにSQL文の句に表をラップします。

    SELECT * FROM CONTAINERS(sales.customers);

    また、表またはビューを常にCONTAINERS句にラップする必要があることを指定するには、次の例のようにアプリケーション・ルート内でENABLE CONTAINERS_DEFAULT句を指定したALTER TABLEまたはALTER VIEW文を発行します。

    ALTER TABLE sales.customers ENABLE CONTAINERS_DEFAULT;

    この属性を設定した後で、アプリケーション・ルートで発行される問合せまたはDML文はデータベース・オブジェクトに対してデフォルトでCONTAINERS句を使用します。DBA_TABLESおよびDBA_VIEWSビューのCONTAINERS_DEFAULT列は、デフォルトでCONTAINERS句に対してデータベース・オブジェクトが有効になるかどうかを示します。

  • データリンク・アプリケーション共通オブジェクト: DML文は、アプリケーション・ルート内のデータリンク・アプリケーション・オブジェクトに対して通常どおり発行できます。アプリケーション・ルート内のDMLの変更は、アプリケーション・コンテナ内のすべてのアプリケーションPDBで使用可能なデータに影響します。DML文は、アプリケーションPDB内のデータリンク・アプリケーション・オブジェクトに対して発行できません。

  • 拡張データリンク・アプリケーション共通オブジェクト: DML文は、アプリケーション・ルートおよびアプリケーションPDB内の拡張データリンク・アプリケーション・オブジェクトに対して通常どおり発行できます。アプリケーション・ルート内のDMLの変更は、アプリケーション・コンテナ内のすべてのアプリケーションPDBで使用可能なデータに影響します。アプリケーションPDB内でのDMLによる変更は、そのアプリケーションPDBに固有のデータにのみ影響します。

データリンク・オブジェクトまたは拡張データリンク・オブジェクトを持つアプリケーション・ルートがあり、このアプリケーション・ルートがプロキシPDBを使用して同期される1つ以上のアプリケーション・ルート・レプリカのマスター・アプリケーション・ルートであるとします。この構成では、DML文がアプリケーションのインストール、アップグレードまたはパッチ適用中に発行された場合、DMLの変更はアプリケーション・ルート・レプリカにのみ同期されます。具体的には、DMLの変更はALTER PLUGGABLE DATABASE APPLICATION BEGIN文とALTER PLUGGABLE DATABASE APPLICATION END文の間にアプリケーション・ルートで発行する必要があります。アプリケーションのインストール、アップグレードまたはパッチ適用の外側で行われたDMLの変更は、現在のアプリケーション・ルートにのみ適用され、アプリケーション・ルート・レプリカには同期されません。

DML文をデータリンク・アプリケーション共通オブジェクトまたは拡張データリンク・アプリケーション共通オブジェクトに対して発行するには:

  1. 該当するステップを行います。
    アプリケーション・ルート・レプリカ構成の一部ではないアプリケーション共通オブジェクトの場合:
    1. データベース・オブジェクトに対してDML文を発行するために必要な権限を持つユーザーとして、アプリケーション・コンテナ内の該当するコンテナに接続します。
    2. DML文を通常どおりに発行します。
    アプリケーション・ルート・レプリカ構成の一部ではないデータリンク・オブジェクトまたは拡張データリンク・オブジェクトの場合:
    1. SQL*Plusで、現在のコンテナが構成のアプリケーション・ルート・レプリカのマスター・アプリケーション・ルートであることを確認します。
      現在のユーザーは、データベース・オブジェクトに対してDML文を発行するために必要な権限を持っている必要があります。
    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. データリンク・アプリケーション共通オブジェクトに対してDML文を発行します。
    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を同期します。

44.4.5 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を同期します。

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

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

44.5.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句には、次の制限事項が適用されます。

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

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

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

44.5.2 アプリケーション・コンテナにおける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文を実行します。

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

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

ALTER PLUGGABLE DATABASE CONTAINERS DEFAULT TARGET = (APDB1);

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

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

ALTER PLUGGABLE DATABASE CONTAINERS DEFAULT TARGET = NONE;

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

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

44.6.1 コンテナ・マップを使用したPDBによるパーティション化について

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

コンテナ・マップは、共通オブジェクトの列に論理パーティション・キーを定義できます。このマッピングによって、コンテナがコンテナ・マップに基づいて内部的に解決されるため、CON_ID述語を使用して問合せを定義するという要件、およびCONTAINERS句を使用する必要性がなくなります。単一のPDBに複数のテナントがあるテナントIDを使用した行ベースの統合から、各テナントに別々のPDBを使用する構成に移行する場合に、コンテナ・マップが役に立つことがよくあります。

アプリケーション・コンテナでコンテナ・マップを使用するには、アプリケーション・ルートでALTER DATABASE文を使用して、CONTAINER_MAPデータベース・プロパティのパーティション化された表を指定します。パーティション化された表はマップ・オブジェクトと呼ばれます。マップ・オブジェクトは、よく使用される列に基づいてメタデータリンク表内のデータに対して次のいずれかのパーティション化戦略を指定します。

  • レンジ・パーティション化

  • リスト・パーティション化

  • ハッシュ・パーティション化

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

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

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

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

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

レンジ・パーティション化された表をマップ・オブジェクトに使用する別の例について考えます。次の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句は必要ありません。CONTAINERSを指定した最初の問合せに示されているように、問合せが単一のアプリケーションPDBにのみ関連する場合、問合せではこのアプリケーションPDBのコンテナIDをWHERE句に指定する必要があり、この要件によってアプリケーション変更が生じることがあります。コンテナ・マップを使用する2番目の問合せでは、CONTAINERS句が置き換えられてコンテナが指定されていません。これは、コンテナ・マップによって適切なアプリケーションPDBに問合せが送られるためです。また、コンテナ・マップを使用する問合せは一般にCONTAINERS句を使用する問合せよりも効率的です。コンテナ・マップは、ALTER DATABASEシステム権限を持つ共通ユーザーが作成する必要があります。問合せはコンテナ・マップで有効にされているオブジェクトに対して実行され、問合せの権限はそのオブジェクトに対して付与されている権限によって判別されます。

注意:

  • コンテナ・マップは、CDBルートでは作成できません。

  • 各アプリケーション・コンテナに1つのコンテナ・マップという制限があります。

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

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

44.6.2 コンテナ・マップの作成

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

マップ・オブジェクトは、各パーティション名がアプリケーション・コンテナ内のアプリケーションPDBの名前と一致するパーティション化された表です。
コンテナ・マップを作成する前に、適切なPDBのあるアプリケーション・コンテナがCDBに存在している必要があります。
アプリケーション・コンテナには、少なくとも1つのアプリケーションがインストールされている必要があります。
コンテナ・マップを使用して問い合せられる表には共通列が必要です。
  1. SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
  2. マップ・オブジェクトを作成します。
  3. CONTAINER_MAPデータベース・プロパティをマップ・オブジェクトに設定します。
    ALTER DATABASE SET CONTAINER_MAP = 'map_table_schema.map_table_name';
    map_table_schemaを表の所有者で置換し、map_table_nameを表の名前で置換します。
  4. アプリケーションのインストール、アップグレードまたはパッチ適用を開始します。
  5. コンテナ・マップで使用されるメタデータリンク表が存在しない場合、それを作成します。
  6. ENABLE CONTAINER_MAP句を指定したALTER TABLE文を発行することで、問い合せられる表のコンテナ・マップを有効にします。
  7. ENABLE CONTAINERS_DEFAULT句を指定したALTER TABLE文を発行することで、CONTAINERS句に対して問い合せる表が有効になっていることを確認します。
  8. 前に開始したアプリケーションのインストール、アップグレードまたはパッチ適用が終了します。

例44-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である必要があります。これらの値は、コンテナ・マップが正常に動作していることを示します。