17 アプリケーション・コンテナの管理
アプリケーション・ルートとアプリケーションPDBを含むアプリケーション・コンテナを管理できます。アプリケーション・コンテナにインストールされているアプリケーションも管理できます。
ノート:
この章のタスクは、SQL*PlusまたはOracle SQL Developerを使用して実行できます。この章のトピックは、次のとおりです:
- アプリケーション・コンテナの管理について
アプリケーション・コンテナの管理の一部の側面はCDBルートおよびCDB全体の管理に似ていますが、その他の側面はPDBの管理に似ています。 - アプリケーション・ルートの変更について
ALTER DATABASE
文でアプリケーション・ルートを変更できます。ALTER PLUGGABLE DATABASE
文では、アプリケーションPDBのオープン・モードを変更できます。 - アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・コンテナ内のアプリケーションをインストール、アップグレードまたはパッチ適用します。 - アプリケーション共通オブジェクトの管理
アプリケーション共通オブジェクトは、アプリケーション・コンテナ内の共有されるユーザー作成データベース・オブジェクトです。アプリケーション共通オブジェクトは、アプリケーション・ルートに作成されます。 - アプリケーション・コンテナ内のコンテナに対するDML文の発行
アプリケーション・ルートで発行されるDML文では、アプリケーション・コンテナ内の1つ以上のコンテナを変更できます。また、DML文に対して1つ以上のデフォルト・コンテナ・ターゲットを指定できます。 - コンテナ・マップを使用したPDBでのパーティション化
コンテナ・マップにより、データが表レベルで物理的にパーティション化されていない場合にデータをアプリケーションPDBレベルでパーティション化できます。
親トピック: マルチテナント環境の管理
アプリケーション・コンテナの管理について
アプリケーション・コンテナの管理の一部の側面はCDBルートおよびCDB全体の管理に似ていますが、その他の側面はPDBの管理に似ています。
アプリケーション・コンテナの管理は、アプリケーション・ルートとアプリケーション・ルートに接続されるアプリケーションPDBの両方を管理できるため、CDBの管理と似ています。ただし、アプリケーション・コンテナの管理は、アプリケーション・コンテナに対する変更が他のアプリケーション・コンテナやCDB内のPDBに影響しないため、PDBの管理にも似ています。
次の表では、CDBまたはCDBルートを管理する管理タスクに似たアプリケーション・コンテナの管理タスクについて説明します。
表17-1 CDBの管理に似たアプリケーション・コンテナ管理タスク
管理タスク | 説明 | 詳細情報 |
---|---|---|
アプリケーション共通ユーザーおよび共通して付与される権限の構成 |
アプリケーション共通ユーザーおよび権限は、CDBルートの共通ユーザーおよび共通して付与される権限に似ていますが、アプリケーション・コンテナでは、共通ユーザーおよび共通して付与される権限は、アプリケーション・ルート、アプリケーション・ルートに属するアプリケーションPDB、アプリケーション・ルートに属するオプションのアプリケーション・シードなど、アプリケーション・コンテナのコンテナ内にのみ存在します。 |
|
アプリケーション・コンテナの作成 |
現在のコンテナがCDBルートである共通ユーザーは、 |
|
アプリケーションPDBの作成 |
現在のコンテナがアプリケーション・ルートである共通ユーザーは、アプリケーション・ルートに接続されるアプリケーションPDBを作成できます。 |
|
コンテナへの切替え |
適切な権限を持つユーザーは、アプリケーション・ルート、アプリケーション・ルートに属するアプリケーションPDB、アプリケーション・ルートに属するオプションのアプリケーション・シードなど、アプリケーション・コンテナ内のコンテナ間を切り替えることができます。 |
|
|
|
|
データ定義言語(DDL)文の発行 |
アプリケーション・コンテナでは、DDL文をアプリケーション・コンテナ内のすべてのコンテナに適用できる場合も、現在のコンテナにのみ適用できる場合もあります。 |
次の表では、PDBを管理する管理タスクに似たアプリケーション・コンテナの管理タスクについて説明します。
表17-2 PDBの管理に似たアプリケーション・コンテナ管理タスク
管理タスク | 説明 | 詳細情報 |
---|---|---|
アプリケーション・ルートへの接続 |
アプリケーション・ルートには固有のサービス名があり、ユーザーはPDBに接続するのと同じ方法でアプリケーション・ルートに接続できます。同様に、各アプリケーションPDBには固有のサービス名があり、アプリケーション・シードには固有のサービス名があります。 |
|
|
|
|
SQL*Plusの |
SQL*Plusの |
|
|
|
|
表領域の管理 |
管理者は、アプリケーション・ルートおよびアプリケーションPDBの表領域を作成、変更および削除できます。各コンテナには固有の表領域があります。 |
|
データファイルおよび一時ファイルの管理 |
管理者は、アプリケーション・ルートおよびアプリケーションPDBのデータファイルおよび一時ファイルを作成、変更および削除できます。各コンテナには固有のファイルがあります。 |
データファイルおよび一時ファイルの管理の詳細は、『Oracle Database管理者ガイド』を参照してください |
スキーマ・オブジェクトの管理 |
PDBで行うのと同じ方法で、アプリケーション・ルートおよび各アプリケーションPDB内のスキーマ・オブジェクトを作成、変更および削除できます。特定のアプリケーション・ルートまたはアプリケーションPDBで起動するトリガーを作成することもできます。 ただし、アプリケーション・コンテナではアプリケーション共通オブジェクトがサポートされ、アプリケーション・コンテナ内のコンテナ間で共有できます。アプリケーション共通オブジェクトはPDBに作成できません。 |
この項では、次の項目について説明します。
親トピック: アプリケーション・コンテナの管理
アプリケーション・ルートの変更について
ALTER DATABASE
文でアプリケーション・ルートを変更できます。ALTER PLUGGABLE DATABASE
文では、アプリケーションPDBのオープン・モードを変更できます。
次の表に、アプリケーション・ルートで発行されるALTER DATABASE
およびALTER PLUGGABLE DATABASE
文の句によって変更されるコンテナを示します。表には、アプリケーション・ルートで許可されない文もリストしています。
ノート:
現在のコンテナがアプリケーション・ルートであるときに発行された文は、CDBルート、または現在のアプリケーション・ルートに属していないPDBには影響しません。表17-3 アプリケーション・ルートのコンテナを変更する文
アプリケーション・ルートのみの変更 | 1つ以上のアプリケーションPDBの変更 | アプリケーション・ルートで発行できない |
---|---|---|
現在のコンテナがアプリケーション・ルートであるアプリケーション共通ユーザーとして接続した場合、次の句を含む 次の句を含む これらの句を使用すると、特定のアプリケーションPDBにデフォルト以外の値を設定できます。 |
現在のコンテナがアプリケーション・ルートであるアプリケーション共通ユーザーとして接続した場合、次の句を含む 現在のコンテナがアプリケーションPDBである場合、この句を含む 現在のコンテナがアプリケーション・ルートであるアプリケーション共通ユーザーとして接続した場合、次の句を含む |
現在のコンテナがアプリケーション・ルートであるアプリケーション共通ユーザーとして接続した場合、次の句を含む |
アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・コンテナ内にアプリケーションをインストール、アップグレードまたはパッチ適用します。
アプリケーション・コンテナからアプリケーションをアンインストールすることもできます。アプリケーション・ルートでこれらの操作を実行します。アプリケーションPDBがアプリケーション・ルート内のアプリケーションと同期するときに、アプリケーション・コンテナによってアプリケーションの変更がアプリケーションPDBに伝播されます。
この項では、次の項目について説明します。
- アプリケーションの管理について
アプリケーション・コンテナでは、アプリケーションは名前付きのバージョン管理されたアプリケーション・メタデータおよび共通データのセットです。アプリケーションはアプリケーション・ルートに格納されます。 - アプリケーション・コンテナへのアプリケーションのインストール
アプリケーション・コンテナにアプリケーションをインストールできます。 - アプリケーション・コンテナ内のアプリケーションのアップグレード
アプリケーションに対する大きな変更によってアプリケーション・アップグレードが構成されます。アプリケーション・コンテナのアプリケーションをアップグレードできます。 - アプリケーション・コンテナ内のアプリケーションのパッチ適用
アプリケーションに対する小さな変更によってアプリケーション・パッチが構成されます。 - アプリケーション・コンテナへの既存のアプリケーションの移行
PDBにインストールされているアプリケーションをアプリケーション・コンテナに移行できます。 - アプリケーションPDB内のアプリケーションの同期
アプリケーションの同期により、アプリケーションPDB内のアプリケーションがアプリケーション・ルートの最新バージョンおよびパッチに更新されます。 - アプリケーション・ルート・レプリカとプロキシPDBの同期
異なるCDB内のアプリケーション・コンテナが同じアプリケーションを持つ場合、それらのアプリケーション・ルートは、マスター・アプリケーション・ルート、レプリカ・アプリケーション・ルートおよびプロキシPDBを作成することで同期を維持できます。 - アプリケーションの互換バージョンの設定
アプリケーションの互換バージョンは、アプリケーション・コンテナに属するアプリケーションPDBで使用可能なアプリケーションの最も古いバージョンです。 - アプリケーションのインストール、アップグレードおよびパッチ適用の操作中の一括挿入の実行
SQL*Loaderは、アプリケーションのインストール、アップグレードおよびパッチ適用の操作中に表に一括挿入することがサポートされる唯一のユーティリティです。従来型パス・ロードのみ、アプリケーションのインストール、アップグレードおよびパッチ適用の操作中に一括挿入することがサポートされます。 - アプリケーション・コンテナからのアプリケーションのアンインストール
アプリケーション・コンテナ内のアプリケーションをアンインストールできます。
関連トピック
親トピック: アプリケーション・コンテナの管理
アプリケーション管理について
アプリケーション・コンテナでは、アプリケーションは名前付きのバージョン管理されたアプリケーション・メタデータおよび共通データのセットです。アプリケーションはアプリケーション・ルートに格納されます。
このコンテキストでは、"アプリケーション"という用語は"アプリケーション・バックエンド"を意味します。アプリケーション共通オブジェクトには、ユーザー・アカウント、表、PL/SQLパッケージなどが含まれます。アプリケーションは、アプリケーション・ルートに属するアプリケーションPDBと共有できます。アプリケーション変更を実行した場合、アプリケーションPDBはアプリケーション・ルート内のアプリケーションと同期できます。
この項では、次の項目について説明します。
i
- アプリケーション・メンテナンスの基本的なステップ
アプリケーション・ルート内にアプリケーションをインストール、アップグレードおよびパッチ適用できます。 - アプリケーションのバージョン
アプリケーション・コンテナは、アプリケーションのバージョンとアプリケーションのパッチも管理します。 - アプリケーション・モジュール名
アプリケーション・モジュール名は、DBMS_APPLICATION_INFO.SET_MODULE
プロシージャによって設定されるか、それに相当するOCI属性の設定に従って設定されます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・メンテナンスの基本的なステップ
アプリケーション・ルート内にアプリケーションをインストール、アップグレードおよびパッチ適用できます。
ALTER PLUGGABLE DATABASE ... BEGIN
文を発行して操作を開始し、ALTER PLUGGABLE DATABASE ... END
文を発行して操作を終了する必要があります。これらの文は、同じユーザー・セッションまたは別のユーザー・セッションで発行できます。
次に、アプリケーション・コンテナ内のアプリケーションを作成およびメンテナンスするための標準的なプロセスを示します。
-
アプリケーション・コンテナを作成します。
-
ALTER PLUGGABLE DATABASE ... BEGIN INSTALL
を使用してアプリケーション・ルートにアプリケーションをインストールします。このステップには、アプリケーション・データ・モデルの作成と、アプリケーション共通ユーザーおよびアプリケーション共通オブジェクトの構成が含まれます。
ノート:
SQL*Loaderは、アプリケーションのインストール、アップグレードおよびパッチ適用の操作中に表に一括挿入することがサポートされる唯一のユーティリティです。
-
アプリケーション・ルートにアプリケーションPDBを作成します。
-
アプリケーションをインストールする必要のある各アプリケーションPDBをアプリケーション・ルートと同期します。使用する文は
ALTER PLUGGABLE DATABASE APPLICATION ... SYNC
です。 -
各アプリケーションPDBのデータをロードします。
-
アプリケーションをメンテナンスします。
ALTER PLUGGABLE DATABASE ... BEGIN UPGRADE
を使用してアップグレードし、ALTER PLUGGABLE DATABASE ... BEGIN PATCH
を使用してパッチ適用します。 -
アップグレードとパッチから変更を適用する必要のあるアプリケーションPDBを同期します。
-
必要な場合に新規アプリケーションPDBを追加します。
-
必要に応じて、
ALTER PLUGGABLE DATABASE ... BEGIN UNINSTALL
を使用してアプリケーションをアンインストールします。
関連項目:
-
アプリケーション・メンテナンス操作の監査方法を学習するには、『Oracle Databaseセキュリティ・ガイド』を参照してください。
親トピック: アプリケーションの管理について
アプリケーションのバージョン
アプリケーション・コンテナは、アプリケーションのバージョンとアプリケーションのパッチも管理します。
アプリケーション・コンテナは、次のようにバージョンを管理します。
-
アプリケーションをインストールする場合は、アプリケーション・バージョン番号を指定する必要があります。
-
アプリケーションをアップグレードする場合は、古いアプリケーション・バージョン番号と新しいアプリケーション・バージョン番号を指定する必要があります。
-
アプリケーションにパッチを適用する場合は、パッチの最小アプリケーション・バージョン番号とパッチ番号を指定する必要があります。
アプリケーションが進化するときに、アプリケーション・コンテナでは適用するすべてのバージョンとパッチ変更が保持されます。
異なるアプリケーション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にインストールされます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・コンテナ内のアプリケーションのインストールについて
アプリケーション・ルートにアプリケーションをインストールするには、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
システム権限が必要で、権限は一般にアプリケーション・ルートで付与されている必要があります。 -
アプリケーション・ルートは読取り/書込みオープンである必要があります。
自動伝播を使用してアプリケーションをインストールするには:
-
SQL*PlusまたはSQL Developerで、現在のコンテナがPDBであることを確認します。
-
次の形式で
ALTER PLUGGABLE DATABASE APPLICATION BEGIN INSTALL
文を実行します。ALTER PLUGGABLE DATABASE APPLICATION application_name BEGIN INSTALL 'application_version_number';
たとえば、application_nameが
salesapp
でapplication_version_numberが4.2の場合は次の文を実行します。ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN INSTALL '4.2';
-
スクリプト、SQL文またはグラフィカル・ユーザー・インタフェース・ツールを使用してアプリケーションをインストールします。
-
次の形式で
ALTER PLUGGABLE DATABASE APPLICATION END INSTALL
文を実行します。ALTER PLUGGABLE DATABASE APPLICATION application_name END INSTALL 'application_version_number';
たとえば、application_nameが
salesapp
でapplication_version_numberが4.2の場合は次の文を実行します。ALTER PLUGGABLE DATABASE APPLICATION salesapp END INSTALL '4.2';
ノート:
application_nameおよびapplication_version_numberがALTER PLUGGABLE DATABASE APPLICATION BEGIN INSTALL
文とALTER PLUGGABLE DATABASE APPLICATION END INSTALL
文で一致していることを確認します。 -
SYNC
句を指定したALTER PLUGGABLE DATABASE APPLICATION
を発行して、アプリケーションをインストールする必要のあるすべてのアプリケーションPDBを同期します。
アプリケーション・コンテナ内のアプリケーションのアップグレード
アプリケーションに対する大きな変更によってアプリケーション・アップグレードが構成されます。アプリケーション・コンテナのアプリケーションをアップグレードできます。
この項では、次の項目について説明します。
- アプリケーション・コンテナ内のアプリケーションのアップグレードについて
アプリケーション・ルート内のアプリケーションをアップグレードするには、ALTER PLUGGABLE DATABASE APPLICATION
文を発行します。 - アプリケーション・コンテナ内のアプリケーションのアップグレード
アップグレード後に、アップグレードによって発生したアプリケーションの変更は、アプリケーション・ルートと同期されるアプリケーションPDBに伝播されます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・コンテナ内のアプリケーションのアップグレードについて
アプリケーション・ルート内のアプリケーションをアップグレードするには、ALTER PLUGGABLE DATABASE APPLICATION
文を発行します。
- アプリケーション・アップグレードの目的
アプリケーション定義は、アプリケーション・ルート内で1回アップグレードできます。これにより、アップグレードした定義を他のアプリケーションPDBと同期できます。 - アプリケーションのアップグレードの動作
アプリケーションのアップグレード時に、Oracle Databaseによってアプリケーション・ルートが自動的にクローニングされます。 - アプリケーション・アップグレードのためのユーザー・インタフェース
アプリケーション・ルート内のアプリケーション定義をアップグレードするには、ALTER PLUGGABLE DATABASE APPLICATION ... UPGRADE
コマンドを使用します。
関連トピック
アプリケーション・アップグレードの目的
アプリケーション定義は、アプリケーション・ルート内で1回アップグレードできます。これにより、アップグレードした定義を他のアプリケーションPDBと同期できます。
アプリケーションPDBは、アプリケーション・ルート内のアップグレードされたアプリケーション定義を自動的には継承しません。SYNC
句を指定してALTER PLUGGABLE DATABASE
文を手動実行すると、アプリケーションPDBがルート内のアプリケーションと同期されます。スクリプト、SQL文およびグラフィカル・ユーザー・インタフェース・ツールから1つ以上の手法を使用してアップグレードできます。
アプリケーションのアップグレードの動作
アプリケーションのアップグレード時に、Oracle Databaseによってアプリケーション・ルートが自動的にクローニングされます。
アップグレード中、アプリケーションPDBはルート・クローンを指しています。アップグレード中、アプリケーションは実行を継続します。アプリケーションPDBは、メタデータリンクおよび拡張データリンクの表およびビューに対してDMLを実行できます。アプリケーションPDBは、メタデータリンク・オブジェクト、拡張データリンク・オブジェクトおよびデータリンク・オブジェクトを問い合せることができます。
アップグレード後、アプリケーション・ルート・クローンはそのまま残り、ルート・クローン内にあるアップグレード前のバージョンのアプリケーションを使用するアプリケーションPDBを引き続きサポートします。アップグレードしたアプリケーションPDBは、アップグレードされたアプリケーション・ルートを指しています。アップグレードされないアプリケーションPDBは引き続きクローンを使用でき、アプリケーション・ルートに接続されているアプリケーションPDBも、ルート・クローンと同じアプリケーション・バージョンを使用できます。
ノート:
アプリケーションのアップグレードとは異なり、パッチ適用ではアプリケーション・ルート・クローンが作成されません。パッチ適用後にアプリケーションPDBが同期化されていない場合、問合せは、すでにパッチ適用されたアプリケーション・ルートに送信されます。
次の図は、アプリケーション・アップグレード・プロセスを示しています。
ノート:
アプリケーション・ルートがオープン・モードである場合、アプリケーション・ルート・クローンは読取り専用モードになります。アプリケーション・ルートがクローズされている場合、アプリケーション・ルート・クローンもクローズされます。
アプリケーション・アップグレードのためのユーザー・インタフェース
アプリケーション・ルート内のアプリケーション定義をアップグレードするには、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
システム権限が必要で、権限は一般にアプリケーション・ルートで付与されている必要があります。 -
アプリケーション・ルートは読取り/書込みオープンである必要があります。
-
アプリケーション・ルートで透過的データ暗号化が有効にされている場合は、外部パスワード・ストアを構成する必要があります。
アプリケーション・コンテナ内のアプリケーションをアップグレードするには:
-
SQL*PlusまたはSQL Developerで、現在のコンテナがアプリケーション・ルートであることを確認します。
-
次の形式で
ALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE
文を実行します。ALTER PLUGGABLE DATABASE APPLICATION application_name BEGIN UPGRADE 'application_start_version_number' TO 'application_end_version_number';
たとえば、application_nameが
salesapp
、application_start_version_numberが4.2、application_end_version_numberが4.3の場合は、次の文を実行します。ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN UPGRADE '4.2' TO '4.3';
-
スクリプト、SQL文またはグラフィカル・ユーザー・インタフェース・ツールを使用してアプリケーションをアップグレードします。
-
次の形式で
ALTER PLUGGABLE DATABASE APPLICATION END UPGRADE
文を実行します。ALTER PLUGGABLE DATABASE APPLICATION application_name END UPGRADE TO 'application_end_version_number';
たとえば、application_nameが
salesapp
でapplication_end_version_numberが4.3の場合は、次の文を実行します。ALTER PLUGGABLE DATABASE APPLICATION salesapp END UPGRADE TO '4.3';
ノート:
application_nameおよびapplication_end_version_numberがALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE
文とALTER PLUGGABLE DATABASE APPLICATION END UPGRADE
文で一致していることを確認します。 -
SYNC
句を指定したALTER PLUGGABLE DATABASE APPLICATION
を発行して、アプリケーションをアップグレードする必要のあるすべてのアプリケーションPDBを同期します。
アプリケーション・コンテナ内のアプリケーションへのパッチ適用
アプリケーションに対する小さな変更によってアプリケーション・パッチが構成されます。
小さな変更の例として、バグ修正やセキュリティ・パッチがあります。アプリケーション・コンテナのアプリケーションにパッチ適用できます。
この項では、次の項目について説明します。
- アプリケーション・コンテナ内のアプリケーションへのパッチ適用について
アプリケーション・ルート内のアプリケーションにパッチ適用するには、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にインストールされているアプリケーションをアプリケーション・コンテナに移行できます。
アプリケーションをアプリケーション・ルートまたはアプリケーションPDBに移行できます。たとえば、Oracle Database 12cリリース2 (12.2) CDBに接続中のPDBにインストールされているアプリケーションを、Oracle Database 18c CDBのアプリケーション・コンテナに移行できます。
この項では、次の項目について説明します。
- アプリケーション・コンテナへの既存のアプリケーションの移行について
既存のPDBを使用してアプリケーション・ルートを作成して、アプリケーションをアプリケーション・ルートに移行できます。 - 既存のPDBを使用したアプリケーション・ルートの作成
PDBをアプリケーション・コンテナにコピーすることで、PDBにインストールされているアプリケーションを移行します。 - 既存のPDBを使用したアプリケーションPDBの作成
既存のアプリケーションをアプリケーション・ルートに移行した後で、アプリケーションを使用する既存のPDBを使用して、アプリケーションPDBを作成できます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・コンテナへの既存アプリケーションの移行について
既存の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をアプリケーション・コンテナに移行するには、次のステップに従います。
-
PDBのいずれかを選択し、「既存のPDBを使用したアプリケーション・ルートの作成」の手順を使用して、このPDBとともにアプリケーション・ルートを作成します。
このステップの一部として、
DBMS_PDB
パッケージのプロシージャを実行して、データベース・オブジェクト、ユーザー、ロールおよびプロファイルをアプリケーションに関連付けます。 -
「既存のPDBを使用したアプリケーションPDBの作成」の手順を使用して、アプリケーションを実行しているPDBを使用して100個のアプリケーションPDBを作成します。
関連項目:
-
DBMS_PDB
についてさらに学習するには、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください
親トピック: アプリケーション・コンテナへの既存アプリケーションの移行
既存のPDBを使用したアプリケーション・ルートの作成
アプリケーション・コンテナにPDBをコピーすることで、PDBにインストールされているアプリケーションを移行します。
前提条件
Oracle Database 12cリリース2 (12.2)以降のCDBが存在する必要があります。
既存のPDBを使用したアプリケーションPDBの作成
既存のアプリケーションをアプリケーション・ルートに移行した後で、アプリケーションを使用する既存のPDBを使用して、アプリケーションPDBを作成できます。
前提条件
次の前提条件を満たしている必要があります。
-
Oracle Database 12cリリース2 (12.2) CDBが存在する必要があり、アプリケーションPDBが属するアプリケーション・ルートが存在する必要があります。
-
PDBは、アプリケーションで使用されるすべてのアプリケーション共通オブジェクトを含む必要があります。
-
アプリケーションがアプリケーション・ルートにインストールされている必要があります。
関連トピック
親トピック: アプリケーション・コンテナへの既存アプリケーションの移行
アプリケーション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
システム権限が必要です。
例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は、アプリケーション・ルートとアプリケーション・ルートのレプリカを同期できます。 - アプリケーション・ルート・レプリカを参照するプロキシPDBの作成
複数のアプリケーション・コンテナが同じアプリケーションを実行する場合、アプリケーション・コンテナ内のアプリケーションはプロキシPDBを使用して同期を維持できます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・ルート・レプリカのプロキシPDBとの同期について
プロキシPDBは、アプリケーション・ルートとアプリケーション・ルートのレプリカを同期できます。
1つのアプリケーションを複数のアプリケーション・コンテナにインストールできます。プロキシPDBを使用すると、アプリケーションをより効率的にインストール、アップグレードおよびパッチ適用できます。
この構成では、1つのアプリケーション・コンテナにマスター・アプリケーション・ルートがあります。マスター・アプリケーション・ルートは、アプリケーションをインストール、アップグレードおよびパッチ適用する場所です。アプリケーション・ルート・レプリカは、マスター・アプリケーション・ルートの完全なコピーです。各アプリケーション・ルート・レプリカは、マスター・アプリケーション・ルート内のプロキシPDBによって参照されます。
プロキシPDBは、マスター・アプリケーション・ルート内のアプリケーション変更と同期されると、その変更を参照先のアプリケーション・ルート・レプリカに伝播します。アプリケーション・ルート・レプリカが同期された後、アプリケーション・ルート・レプリカに接続されているアプリケーションPDBは、レプリカと同期する方法で変更を取得できます。
次の図に、プロキシPDBを使用してアプリケーション・ルート・レプリカを同期する構成を示します。
また、アプリケーション・ルート・レプリカが構成され、固有のアプリケーションPDBを持つ場合、マスター・アプリケーション・ルート内のCONTAINERS
句を含む問合せは、現在のアプリケーション・コンテナおよびアプリケーション・ルート・レプリカのあるアプリケーション・コンテナからのデータを返すことができます。問合せは、アプリケーション・ルート・レプリカおよびレプリカに接続しているオープンされたアプリケーションPDBからの結果を表示できます。
アプリケーション・ルート・レプリカを参照するプロキシ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
マスター・アプリケーション・ルート内のプロキシPDBprxypdb
から伝播され、depappcon
マスター・アプリケーション・ルートにインストールされます。 -
depappcon
アプリケーション・ルートには、deppdb1
およびdeppdb2
という2つのアプリケーションPDBが含まれます。
-
この例では、msappcon
マスター・アプリケーション・ルート内のsampleapp
アプリケーションに対する変更が、アプリケーションPDBが同期されたときに両方のCDB内のアプリケーションPDBにどのように適用されるかを示します。
-
hqdb
CDBにマスター・アプリケーション・ルートを持つアプリケーション・コンテナを作成します。-
SQL*Plusで、現在のコンテナが
hqdb
CDBルートであることを確認します。 -
次の文で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/');
-
新規マスター・アプリケーション・ルートを読取り/書込みモードでオープンします。
ALTER PLUGGABLE DATABASE msappcon OPEN;
-
-
マスター・アプリケーション・ルートにアプリケーションをインストールします。
-
コンテナをマスター・アプリケーション・ルートに変更します。
ALTER SESSION SET CONTAINER=msappcon;
-
アプリケーションのインストールを開始します。
ALTER PLUGGABLE DATABASE APPLICATION sampleapp BEGIN INSTALL '1.0';
-
アプリケーションをインストールします。
たとえば、データベース・オブジェクトを作成できます。
CREATE TABLE apptb SHARING=METADATA (id NUMBER(6), widget_name VARCHAR2(20));
-
アプリケーションのインストールを終了します。
ALTER PLUGGABLE DATABASE APPLICATION sampleapp END INSTALL '1.0';
-
-
1つ以上のアプリケーションPDBをマスター・アプリケーション・ルートに作成し、同期します。
-
SQL*Plusで、現在のコンテナがマスター・レプリケーション・ルートであることを確認します。
-
マスター・アプリケーション・ルートにアプリケーション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/');
-
両方のアプリケーションPDBをオープンします。
ALTER PLUGGABLE DATABASE mspdb1 OPEN; ALTER PLUGGABLE DATABASE mspdb2 OPEN;
-
アプリケーションPDBをマスター・アプリケーション・ルートと同期します。
ALTER SESSION SET CONTAINER=mspdb1; ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC; ALTER SESSION SET CONTAINER=mspdb2; ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
-
-
depdb
CDBにアプリケーション・ルート・レプリカを持つアプリケーション・コンテナを作成します。-
SQL*Plusで、現在のコンテナが
depdb
CDBルートであることを確認します。 -
次の文で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
句が必要です。
-
-
新規アプリケーション・ルート・レプリカを読取り/書込みモードでオープンします。
ALTER PLUGGABLE DATABASE depappcon OPEN;
-
-
プロキシPDBをマスター・アプリケーション・ルートに作成し、同期します。
-
SQL*Plusで、現在のコンテナがマスター・レプリケーション・ルートであることを確認します。
-
アプリケーション・ルート・レプリカへのデータベース・リンクを作成します。
CREATE PUBLIC DATABASE LINK depappcon CONNECT TO depappconadm IDENTIFIED BY password USING 'depappcon';
-
プロキシPDBを作成します。
CREATE PLUGGABLE DATABASE prxypdb AS PROXY FROM depappcon@depappcon FILE_NAME_CONVERT = ('/disk2/oracle/dbs/depsappcon/', '/disk1/oracle/dbs/prxypdb/');
-
プロキシPDBをオープンします。
ALTER PLUGGABLE DATABASE prxypdb OPEN;
-
プロキシPDBをマスター・アプリケーション・ルートと同期します。
ALTER SESSION SET CONTAINER=prxypdb; ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
-
-
1つ以上のアプリケーションPDBをアプリケーション・ルート・レプリカに作成し、同期します。
-
コンテナをアプリケーション・ルート・レプリカに変更します。
ALTER SESSION SET CONTAINER=depappcon;
-
アプリケーション・ルート・レプリカにアプリケーション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/');
-
両方のアプリケーションPDBをオープンします。
ALTER PLUGGABLE DATABASE deppdb1 OPEN; ALTER PLUGGABLE DATABASE deppdb2 OPEN;
-
アプリケーションPDBをマスター・アプリケーション・ルートと同期します。
ALTER SESSION SET CONTAINER=deppdb1; ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC; ALTER SESSION SET CONTAINER=deppdb2; ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
-
-
アプリケーション・ルート・レプリカのアプリケーションPDB内の
apptb
表の構造を確認します。-
アプリケーション・ルート・レプリカから、コンテナを
deppdb1
アプリケーションPDBに切り替えます。ALTER SESSION SET CONTAINER=deppdb1;
-
apptb
表を記述します。desc apptb
出力は次のようになります。
Name Null? Type ----------------------------------------- -------- ---------------------------- ID NUMBER(6) WIDGET_NAME VARCHAR2(20)
-
-
マスター・アプリケーション・ルートで、アプリケーションをアップグレードします。
-
コンテナをマスター・アプリケーション・ルートに変更します。
ALTER SESSION SET CONTAINER=msappcon;
-
アプリケーションのアップグレードを開始します。
ALTER PLUGGABLE DATABASE APPLICATION sampleapp BEGIN UPGRADE '1.0' TO '1.1';
-
アプリケーションを変更します。
たとえば、
apptb
表に行を追加します。ALTER TABLE apptb ADD (widget_type VARCHAR2(30));
-
アプリケーションのアップグレードを終了します。
ALTER PLUGGABLE DATABASE APPLICATION sampleapp END UPGRADE TO '1.1';
-
-
プロキシPDBをマスター・アプリケーション・ルートと同期します。
ALTER SESSION SET CONTAINER=prxypdb; ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
-
アプリケーション・ルート・レプリカ内のアプリケーションPDBを同期し、アプリケーションのアップグレードを確認します。
-
アプリケーションPDBを同期します。
ALTER SESSION SET CONTAINER=deppdb1; ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC; ALTER SESSION SET CONTAINER=deppdb2; ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
-
アプリケーション・ルート・レプリカから、コンテナを
deppdb1
アプリケーションPDBに切り替えます。ALTER SESSION SET CONTAINER=deppdb1;
-
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は接続できません。
- SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
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 BEGIN
と ALTER PLUGGABLE DATABASE APPLICATION END
文の間に正しいSQL*Loaderモジュール名を指定する必要があります。モジュール名はSQL Loader Conventional Path Load
です。
例17-8 アプリケーションのインストール中の従来型パス・ロードの実行
この例では、従来型パス・ロードがアプリケーション・ルートで実行されます。
-
SQL*Plusで、アプリケーション・ルートに切り替えます。
ALTER SESSION SET CONTAINER=cdb1_approot1;
-
正しいモジュールを設定します。
exec DBMS_APPLICATION_INFO.SET_MODULE('SQL Loader Conventional Path Load', '');
-
アプリケーションのインストールを開始します。
ALTER PLUGGABLE DATABASE APPLICATION APP1 BEGIN INSTALL '1';
-
SQL*Loaderを使用して、従来型パス・ロードを実行します。
host sqlldr u1/u1@cdb1_approot1 control=my_bulk_load.ctl rows=3 log=my_bulk_load.log
-
アプリケーションのインストールを終了します。
ALTER PLUGGABLE DATABASE APPLICATION APP1 END INSTALL '1';
関連項目:
SQL*Loaderの詳細は、『Oracle Databaseユーティリティ』を参照してください親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・コンテナからのアプリケーションのアンインストール
アプリケーション・コンテナのアプリケーションをアンインストールできます。
この項では、次の項目について説明します。
- アプリケーション・コンテナからのアプリケーションのアンインストールについて
アプリケーション・ルートからアプリケーションをアンインストールするには、ALTER PLUGGABLE DATABASE APPLICATION
文を発行します。 - アプリケーション・コンテナからのアプリケーションのアンインストール
アプリケーション・コンテナからアプリケーションをアンインストールするには、ALTER PLUGGABLE DATABASE APPLICATION BEGIN UNINSTALL
文を実行してアンインストールを開始し、ALTER PLUGGABLE DATABASE APPLICATION END UNINSTALL
文を実行して終了します。アプリケーションは、アプリケーション・ルートのアプリケーションと同期されるアプリケーションPDBからアンインストールされます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・コンテナからのアプリケーションのアンインストールについて
アプリケーション・ルートからアプリケーションをアンインストールするには、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
システム権限が必要で、権限は一般にアプリケーション・ルートで付与されている必要があります。 -
アプリケーション・ルートは読取り/書込みオープン・モードである必要があります。
アプリケーション共通オブジェクトの管理
アプリケーション共通オブジェクトは、アプリケーション・コンテナで共有されている、ユーザーにより作成されたデータベース・オブジェクトです。アプリケーション共通オブジェクトは、アプリケーション・ルートに作成されます。
この項では、次の項目について説明します。
- アプリケーション共通オブジェクトについて
アプリケーション共通オブジェクトは、アプリケーション・ルートに作成され、アプリケーション・ルートに属するアプリケーションPDBと共有されます。 - アプリケーション共通オブジェクトの制限
いくつかの制限がアプリケーション共通オブジェクトに適用されます。 - アプリケーション共通オブジェクトの作成
DEFAULT_SHARING
初期化パラメータが適切な値に設定されていることを確認するか、SHARING
句をCREATE
SQL文に含めることで、アプリケーション共通オブジェクトをアプリケーション・ルートに作成します。 - アプリケーション共通オブジェクトに対するDML文の発行
メタデータリンク、データリンクおよび拡張データリンクのアプリケーション共通オブジェクトに対するデDML文の発行のルールは異なります。 - DDL文でのアプリケーション共通オブジェクトの変更
特定のDDL文でアプリケーション・ルート内のアプリケーション共通オブジェクトを変更する場合は、ALTER PLUGGABLE DATABASE APPLICATION BEGIN
文とALTER PLUGGABLE DATABASE APPLICATION END
文の間でオブジェクトを変更する必要があり、変更を適用するためにアプリケーションPDBがアプリケーションと同期する必要があります。
親トピック: アプリケーション・コンテナの管理
アプリケーション共通オブジェクトについて
アプリケーション共通オブジェクトは、アプリケーション・ルートに作成され、アプリケーション・ルートに属するアプリケーションPDBと共有されています。
アプリケーション共通オブジェクトには、メタデータリンク、データリンクおよび拡張データリンクの3種類があります。次のタイプのデータベース・オブジェクトをアプリケーション共通オブジェクトにすることができます。
-
分析ビュー
-
属性ディメンション
-
ディレクトリ
-
外部プロシージャ・ライブラリ
-
階層
-
Javaクラス、JavaリソースおよびJavaソース
-
オブジェクト表、オブジェクト・タイプおよびオブジェクト・ビュー
-
順序
-
パッケージ、ストアド・ファンクションおよびストアド・プロシージャ
-
シノニム
-
表(グローバル一時表を含む)
-
トリガー
-
ビュー
この項では、次の項目について説明します。
- アプリケーション共通オブジェクトの作成
現在のコンテナがアプリケーション・ルートのときにCREATE
文を発行し、SHARING
句を指定することで、アプリケーション共通オブジェクトを作成します。 - メタデータリンク・アプリケーション共通オブジェクトについて
メタデータリンク・アプリケーション共通オブジェクトの場合、オブジェクトのメタデータはアプリケーション・ルートに1回格納されます。 - 拡張データリンク・アプリケーション共通オブジェクトについて
データリンク・アプリケーション共通オブジェクトの場合は、オブジェクトのメタデータとデータの両方がアプリケーション・ルートに1回格納されます。アプリケーション・ルートに属する各アプリケーションPDB内のデータ・リンクにより、アプリケーションPDBはオブジェクトのメタデータとデータを共有できます。 - 拡張データリンク・アプリケーション共通オブジェクトについて
拡張データリンク・オブジェクトの場合、各アプリケーションPDBは、アプリケーション・ルートの共通データを共有しながら独自データを作成できます。アプリケーション・ルートに格納されるデータのみがすべてのアプリケーションPDBに共通です。
関連項目:
親トピック: アプリケーション共通オブジェクトの管理
アプリケーション共通オブジェクトの作成
現在のコンテナがアプリケーション・ルートのときに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
句にはMETADATA
、DATA
、EXTENDED DATA
またはNONE
を設定できます。オブジェクト表の場合は、METADATA
またはNONE
のみが有効です。 -
ビュー(オブジェクト・ビューを除く)の場合、
SHARING
句にはMETADATA
、DATA
、EXTENDED DATA
またはNONE
を設定できます。オブジェクト・ビューの場合は、METADATA
またはNONE
のみが有効です。 -
順序の場合、
SHARING
句にはMETADATA
、DATA
または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提供型:
ANYTYPE
、ANYDATASET
、URI型、SDO_TOPO_GEOMETRY
、SDO_GEORASTER
およびExpression
また、オブジェクト表およびオブジェクト・ビューに対する問合せでは、現在のコンテナではないコンテナからはデータが返されません。
親トピック: アプリケーション共通オブジェクトの管理
アプリケーション共通オブジェクトの作成
DEFAULT_SHARING
初期化パラメータが適切な値に設定されていることを確認するか、SHARING
句をCREATE
SQL文に含めることで、アプリケーション共通オブジェクトをアプリケーション・ルートに作成します。
例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_nameはsalesapp
であり、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_nameはsalesapp
であり、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_nameはsalesapp
であり、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を発行できます。 - データリンク共通オブジェクトに対するDMLの発行
データリンク・アプリケーション・オブジェクトの場合は、アプリケーション・ルートで通常どおりDMLを発行します。拡張データリンク・アプリケーション・オブジェクトの場合は、アプリケーション・ルートおよびアプリケーションPDBで通常どおりDMLを発行します。
親トピック: アプリケーション共通オブジェクトの管理
メタデータリンク共通オブジェクトに対するDMLの発行
メタデータリンク・アプリケーション・オブジェクトには、通常どおりDMLを発行できます。
メタデータリンク・アプリケーション共通オブジェクトの場合、オブジェクトの定義はすべてのアプリケーションPDBで同じですが、データは異なります。ユーザーとアプリケーションは、通常のデータベース・オブジェクトと同じ方法でこれらのオブジェクトに対してDML文を発行できます。DMLは現在のコンテナにのみ作用します。
この項では、次の項目について説明します。
- CONTAINERS句を使用した問合せ
メタデータリンク・オブジェクトの場合は、CONTAINERS
句を使用してアプリケーション・コンテナ内のすべてのPDBに対して表またはビューを問い合せることができます。 - デフォルトのコンテナまたはDMLの設定
メタデータリンク・オブジェクトのCONTAINERS_DEFAULT
属性を設定すると、アプリケーション・ルートで発行されるDMLがデフォルトでCONTAINERS
句でラップされます。
親トピック: アプリケーション共通オブジェクトに対するDML文の発行
CONTAINERS句を使用した問合せ
メタデータリンク・オブジェクトの場合は、CONTAINERS
句を使用してアプリケーション・コンテナ内のすべてのPDBに対して表またはビューを問い合せることができます。
メタデータリンク・オブジェクトの場合は、アプリケーション・ルートでDMLを実行するときにCONTAINERS
句が役に立ちます。問合せによってUNION ALL
が実行されると、ルートとオープンしているすべてのアプリケーションPDB (RESTRICTED
モードのPDBを除く)のオブジェクトからすべての行が戻されます。
PDBのサブセットを問い合せるには、述語にCON_ID
またはCON$NAME
を指定します。問合せ対象の表またはビューにCON_ID
列が含まれていない場合、問合せはCON_ID
列を問合せ結果に追加し、与えられた行が表すデータがあるコンテナを識別します。
前提条件
次の前提条件に注意してください。
-
アプリケーション・コンテナのデータを問い合せるには、共通ユーザーとしてアプリケーション・ルートに接続する必要があります。
-
表またはビューは、アプリケーション・コンテナのアプリケーション・ルートとすべてのPDBに存在する必要があります。
-
表またはビューは、自分のスキーマ内に存在している必要があります。
schema
を指定する必要はありませんが、指定する場合は自分のスキーマを指定する必要があります。
アプリケーション・コンテナのメタデータリンク・オブジェクトを問い合せるには:
-
アプリケーション共通ユーザーとしてアプリケーション・ルートにログインします。
-
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の発行
デフォルトのコンテナまたはDMLの設定
メタデータリンク・オブジェクトのCONTAINERS_DEFAULT
属性を設定すると、アプリケーション・ルートで発行されるDMLがデフォルトでCONTAINERS
句でラップされます。
ALTER TABLE
文またはALTER VIEW
文にENABLE CONTAINERS_DEFAULT
を設定します。DBA_TABLES
およびDBA_VIEWS
ビューのCONTAINERS_DEFAULT
列は、デフォルトでCONTAINERS
句に対してデータベース・オブジェクトが有効になるかどうかを示します。
メタデータリンク表またはビューに関するDMLのデフォルト・コンテナを設定するには:
-
アプリケーション共通ユーザーとしてアプリケーション・ルートにログインします。
-
アプリケーション・ルートで
ENABLE CONTAINERS_DEFAULT
句を指定したALTER TABLE
文またはALTER VIEW
文を発行します。次の文は、
sh.customers
のデフォルト・コンテナを設定します。ALTER TABLE sh.customers ENABLE CONTAINERS_DEFAULT;
この属性を設定した後、アプリケーション・ルートで発行される問合せとDML文は
sh.customers
に対してデフォルトでCONTAINERS
句を使用します。
親トピック: メタデータリンク共通オブジェクトに対するDMLの発行
データリンク共通オブジェクトに対する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を発行するには:
-
データベース・オブジェクトに対してDML文を発行するために必要な権限を持つユーザーとして、アプリケーション・コンテナ内の該当するコンテナに接続します。
-
DML文を通常どおりに発行します。
アプリケーション・ルート・レプリカ構成の一部ではないデータリンク・オブジェクトまたは拡張データリンク・オブジェクトのDMLを発行するには:
-
SQL*Plusで、現在のコンテナが構成のアプリケーション・ルート・レプリカのマスター・アプリケーション・ルートであることを確認します。
現在のユーザーは、データベース・オブジェクトに対してDML文を発行するために必要な権限を持っている必要があります。
-
アプリケーションのインストール、アップグレードまたはパッチを開始するために
ALTER PLUGGABLE DATABASE APPLICATION ... BEGIN
文を実行します。アプリケーション・アップグレードの一部としてアプリケーション共通オブジェクトを変更する場合は、次の形式でアップグレード文を発行します。
ALTER PLUGGABLE DATABASE APPLICATION application_name BEGIN UPGRADE 'application_start_version_number' TO 'application_end_version_number';
たとえば、application_nameが
salesapp
、application_start_version_numberが4.2、application_end_version_numberが4.3の場合は、次の文を実行します。ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN UPGRADE '4.2' TO '4.3';
-
データリンク・アプリケーション共通オブジェクトに対してDML文を発行します。
-
ALTER PLUGGABLE DATABASE APPLICATION ... END
文を実行します。たとえば、アプリケーション・アップグレードの一部としてアプリケーション共通オブジェクトを変更する場合は、次の形式で文を実行します。
ALTER PLUGGABLE DATABASE APPLICATION application_name END UPGRADE TO 'application_end_version_number';
たとえば、application_nameが
salesapp
、application_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_numberがALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE
文とALTER PLUGGABLE DATABASE APPLICATION END UPGRADE
文で一致していることを確認します。 -
これらの変更を適用する必要のあるすべてのアプリケーションPDBを同期するには、アプリケーションPDBが現在のコンテナであるときに、
SYNC
句を指定したALTER PLUGGABLE DATABASE APPLICATION
文を発行します。
親トピック: アプリケーション共通オブジェクトに対するDML文の発行
DDL文を使用したアプリケーション共通オブジェクトの変更
特定のDDL文でアプリケーション・ルート内のアプリケーション共通オブジェクトを変更する場合は、ALTER PLUGGABLE DATABASE APPLICATION BEGIN
文とALTER PLUGGABLE DATABASE APPLICATION END
文の間でオブジェクトを変更する必要があり、変更を適用するためにアプリケーションPDBがアプリケーションと同期する必要があります。
ALTER
、RENAME
またはDROP
SQL文をデータベース・オブジェクトに対して実行してDDL変更を実行します。
アプリケーション・コンテナ内のコンテナに対するDML文の発行
アプリケーション・ルートで発行されるDML文では、アプリケーション・コンテナ内の1つ以上のコンテナを変更できます。また、DML文に対して1つ以上のデフォルト・コンテナ・ターゲットを指定できます。
この項では、次の項目について説明します。
- アプリケーション・コンテナ内のコンテナに対するDML文の発行について
DML文は、アプリケーション・コンテナ内の複数のコンテナ内のデータベース・オブジェクトに影響することがあります。 - アプリケーション・コンテナ内のDML文のデフォルト・コンテナの指定
アプリケーション・コンテナ内のDML文のデフォルト・コンテナを指定するには、CONTAINERS DEFAULT TARGET
句を指定したALTER PLUGGABLE DATABASE
文を発行します。
親トピック: アプリケーション・コンテナの管理
アプリケーション・コンテナ内のコンテナに対するDML文の発行について
DML文は、アプリケーション・コンテナ内の複数のコンテナ内のデータベース・オブジェクトに影響することがあります。
アプリケーション・ルートで、CONTAINERS
句を含む単一のDML文は、アプリケーション・コンテナ内の1つ以上のコンテナ内の表またはビューを変更できます。CONTAINERS
句を使用するには、変更される表またはビューをCONTAINERS
句に指定し、コンテナをWHERE
句に指定します。INSERT VALUES
文でターゲット・コンテナを指定するには、VALUES
句にCON_ID
値を指定します。また、UPDATE
文またはDELETE
文でターゲット・コンテナを指定するには、WHERE
句にCON_ID
述語を指定します。
sales.customers
表を7
または8
のCON_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;
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つのデフォルトのコンテナのみを使用できます。
例17-14 アプリケーション・コンテナ内のDML文のデフォルト・コンテナの指定
この例では、APDB1
がアプリケーション・コンテナ内のDML文のデフォルト・コンテナであることを指定します。
ALTER PLUGGABLE DATABASE CONTAINERS DEFAULT TARGET = (APDB1);
例17-15 デフォルト・コンテナのクリア
この例は、デフォルト・コンテナ設定をクリアしています。設定されていない場合、デフォルト・コンテナはアプリケーション・ルートです。
ALTER PLUGGABLE DATABASE CONTAINERS DEFAULT TARGET = NONE;
コンテナ・マップを使用したPDBでのパーティション化
コンテナ・マップにより、データが表レベルで物理的にパーティション化されていない場合にデータをアプリケーションPDBレベルでパーティション化できます。
この項では、次の項目について説明します。
- コンテナ・マップについて
コンテナ・マップは、アプリケーション・ルートで定義されているパーティション化されたマップ表を指定するデータベース・プロパティです。 - コンテナ・マップの作成
マップ・オブジェクトを作成し、CONTAINER_MAP
データベース・プロパティをマップ・オブジェクトに設定することで、コンテナ・マップを作成します。
親トピック: アプリケーション・コンテナの管理
コンテナ・マップについて
コンテナ・マップは、アプリケーション・ルートで定義されているパーティション化されたマップ表を指定するデータベース・プロパティです。
コンテナ・マップを使用して、メタデータリンク・オブジェクトのデータをパーティション化します。コンテナ・マップは、よく使用される列に基づいてアプリケーションPDB内のデータをパーティション化します。
たとえば、各アプリケーションPDBに異なるデータを格納する、countries_mlt
(cname
列を使用)というメタデータリンク表を作成する場合があります。pdb_map_tbl
というマップ表がcname
列でリスト別にパーティション化します。amer_pdb
、euro_pdb
およびasia_pdb
の各パーティションがアプリケーションPDBの名前に対応します。
コンテナ・マップは、共通オブジェクトの列に論理パーティション・キーを定義できます。コンテナ・マップに基づいてコンテナが内部的に解決されるため、このマッピングでは、CON_ID
述語を使用して問合せを定義するか、または問合せでCONTAINERS
句を使用するための要件が削除されます。
一部のタイプの行ベース統合では、複数のテナントを含む単一のPDBでテナントIDを使用します。コンテナ・マップは、テナントごとに異なるPDBを使用する構成に移行する場合に役立ちます。
この項では、次の項目について説明します。
- マップ・オブジェクト
マップ・オブジェクトはパーティション化された表です。 - リスト・パーティション化されたコンテナ・マップ: 例
この例では、地理的地域のデータを格納するPDBに問合せをルーティングするコンテナ・マップが使用されます。 - レンジ・パーティション化されたコンテナ・マップ: 例
この例では、特定の部門のデータを格納するPDBに問合せをルーティングするコンテナ・マップが使用されます。
親トピック: コンテナ・マップを使用したPDBでのパーティション化
マップ・オブジェクト
マップ・オブジェクトはパーティション化された表です。
マップ表内のパーティションの名前は、アプリケーション・コンテナ内のアプリケーションPDBの名前と一致します。メタデータリンク・オブジェクトは表レベルで物理的にパーティション化されませんが、コンテナ・マップで使用されるパーティション化戦略を使用して問い合せることができます。
マップ表をメタデータリンク表に関連付けるには、アプリケーション・ルートに接続しているときに、ALTER PLUGGABLE DATABASE ... CONTAINER_MAP
でマップ表を指定します。1つのアプリケーション・コンテナに複数のコンテナ・マップは作成できません。コンテナ・マップはCDBルートで作成できません。
ノート:
-
データは、マップ・オブジェクトに定義されているパーティションと整合性のある方法で、PDB表にロードされる必要があります。
-
アプリケーション・コンテナ内のアプリケーションPDBが変更された場合、マップ・オブジェクトはそれらの変更に対応して自動的に同期されません。たとえば、マップ・オブジェクトで参照されているアプリケーションPDBが、切断、名前変更または削除されていることがあります。そのような変更を反映するには、マップ・オブジェクトを手動で更新する必要があります。
Oracle Database 18c以降は、CONTAINERS()
問合せでマップを使用するために、マップ表のパーティション化列がメタデータリンク表の列と一致している必要はありません。表sh.sales
がコンテナ・マップpdb_map_tbl
に対して有効で、cname
がマップ表のパーティション化列であるとします。sh.sales
にcname
列が含まれていない場合でも、マップ表は次の問合せを適切なPDBにルーティングします: SELECT * FROM CONTAINERS(sh.sales) WHERE cname = 'US' ORDER BY time_id
。
親トピック: コンテナ・マップについて
リスト・パーティション化されたコンテナ・マップ: 例
この例では、地理的地域のデータを格納するPDBに問合せをルーティングするコンテナ・マップが使用されます。
次のアプリケーション・ルート図は、マップ・オブジェクト、メタデータリンク表、およびメタデータリンク表に対する問合せを示しています。問合せは適切なアプリケーションPDBで実行されます。
図には、アプリケーション・コンテナにAMER
、EURO
および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 apppdb1
、apppdb2
および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のあるアプリケーション・コンテナがCDBに存在している必要があります。
-
アプリケーション・コンテナには、少なくとも1つのアプリケーションがインストールされている必要があります。
コンテナ・マップを作成するには:
-
SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
-
CONTAINER_MAP
データベース・プロパティをマップ・オブジェクトに設定します。次の文で、map_table_schemaを表の所有者で置換し、map_table_nameを表の名前で置換します。
ALTER DATABASE SET CONTAINER_MAP = 'map_table_schema.map_table_name';
-
アプリケーションのインストール、アップグレードまたはパッチ適用を開始します。
-
コンテナ・マップで使用されるメタデータリンク表が存在しない場合、それを作成します。
-
ALTER TABLE ... ENABLE CONTAINER_MAP
文を発行することで、問い合せる表のコンテナ・マップを有効にします。 -
ALTER TABLE ... ENABLE CONTAINERS_DEFAULT
文を発行することで、CONTAINERS
句に対して問い合せる表が有効になっていることを確認します。 -
前に開始したアプリケーションのインストール、アップグレードまたはパッチ適用が終了します。
例17-16 コンテナ・マップの作成と使用
この例では、コンテナ・マップを使用する単純なアプリケーションを作成します。アプリケーション・コンテナにAMER
、EURO
およびASIA
という3つのアプリケーションPDBがあることを想定します。アプリケーションPDBは異なる地域(それぞれアメリカ、ヨーロッパおよびアジア)のデータを格納します。メタデータリンク表はアプリケーションに関する情報を格納し、COUNTRY
列があります。このパーティション化戦略では、リストによるパーティションを使用して、各地域のパーティションを作成するマップ・オブジェクトを作成し、国値を使用して地域を決定します。
-
SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
-
マップ・オブジェクトを作成します。
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') );
-
CONTAINER_MAP
データベース・プロパティをマップ・オブジェクトに設定します。ALTER PLUGGABLE DATABASE SET CONTAINER_MAP='salesadm.conmap';
-
アプリケーションのインストールを開始します。
ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN INSTALL '1.0';
-
コンテナ・マップを使用して問い合せられるメタデータリンク表を作成します。
CREATE TABLE oe.cmtb SHARING=METADATA ( value VARCHAR2(30), country VARCHAR2(30));
-
問い合せる表に対してコンテナ・マップを有効にします。
ALTER TABLE oe.cmtb ENABLE CONTAINER_MAP;
-
CONTAINERS
句に対して問い合せる表が有効になっていることを確認します。ALTER TABLE oe.cmtb ENABLE CONTAINERS_DEFAULT;
-
アプリケーションのインストールを終了します。
ALTER PLUGGABLE DATABASE APPLICATION salesapp END INSTALL '1.0';
-
セッションを各アプリケーション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;
-
パーティション化戦略に基づいて、各アプリケーション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;
-
セッションをアプリケーション・ルートに切り替えて、コンテナ・マップを使用してデータを問い合せます。
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
である必要があります。これらの値は、コンテナ・マップが正常に動作していることを示します。
親トピック: コンテナ・マップを使用したPDBでのパーティション化