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

アプリケーション・コンテナにインストールされるアプリケーションをインストールおよび管理できます。

ノート:

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

アプリケーション・コンテナ内のアプリケーションの概要

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

アプリケーション・コンテナのコンテキストでは、「アプリケーション」という用語は「マスター・アプリケーション定義」を意味します。たとえば、表、ビュー、パッケージなどの定義をアプリケーションに含めることができます。

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

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

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

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

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

管理タスク 説明 詳細情報

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

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

『Oracle Databaseセキュリティ・ガイド』

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

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

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

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

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

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

コンテナへの切替え

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

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

ALTER SYSTEM SET文の発行

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

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

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

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

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

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

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

管理タスク 説明 詳細情報

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

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

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

ALTER PLUGGABLE DATABASE文の発行

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

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

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

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

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

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

ALTER SYSTEM文の発行

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

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

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

表領域の管理

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

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

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

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

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

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

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

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

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

透過的データ暗号化およびアプリケーション・コンテナ

TDEをアプリケーション・コンテナとともに使用するベスト・プラクティス。

ノート:

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

TDEがアプリケーション・ルートで有効になっている場合、TDEウォレットのパスワードを格納するようにSEPS (セキュアな外部パスワード・ストア)キーストアを構成することをお薦めします。SEPSキーストアが構成されている場合、APPLICATION BEGIN UPGRADE文にKEYSTORE句は必要ありません。その後、KEYSTORE IDENTIFIED BY EXTERNAL STORE句を使用してアプリケーション・ルート・クローンが作成されます。

SEPSキーストアが構成されていない場合、APPLICATION BEGIN UPGRADE文に'KEYSTORE IDENTIFIED BY <password>'句を含める必要があります。そうしないと、アプリケーション・ルート・クローンの作成は失敗します。句が指定されている場合、アプリケーション・ルート・クローンは'KEYSTORE IDENTIFIED BY <password>' 句を使用して作成されます。

SEPSキーストアが構成されているかどうかにかかわらず、TDEウォレットは常に自動ログイン・ウォレットとして構成する必要があります。これは、アクセス時にアプリケーション・ルート・クローンでウォレットが自動的にオープンされるようにするためです。自動ログイン・ウォレットがないと、顧客はアプリケーション・ルート・クローンにSET CONTAINERとしてウォレットをオープンする方法がなく、そのウォレットへの接続は許可されません。

アプリケーション・メンテナンス

このコンテキストにおけるアプリケーション・メンテナンスは、アプリケーションのインストール、アンインストール、アップグレードまたはパッチ適用を指します。

アプリケーションには名前およびバージョン番号が必要です。このプロパティの組合せによって、実行可能なメンテナンス作業が決まります。すべてのメンテナンス作業で、次のステップを実行します。

  1. ALTER PLUGGABLE DATABASE ... APPLICATION文をBEGIN INSTALL句、BEGIN UPGRADE句またはBEGIN PATCH句とともに実行することで開始します。

  2. 文を実行してアプリケーションを変更します。

  3. ALTER PLUGGABLE DATABASE ... APPLICATION文をEND INSTALL句、END UPGRADE句またはEND PATCH句とともに実行することで終了します。

アプリケーションの発展に伴って、アプリケーション・コンテナではバージョンおよびパッチの変更がすべて保守されます。

アプリケーション・メンテナンスについて

ALTER PLUGGABLE DATABASE APPLICATION文を使用して、アプリケーションのインストール、アップグレードおよびパッチ適用操作を実行します。

アプリケーション・メンテナンスの基本的なステップは、次のとおりです。

  1. アプリケーション・ルートにログインします。

  2. アプリケーション・ルートでALTER PLUGGABLE DATABASE APPLICATION ... BEGIN文を使用して操作を開始します。

  3. アプリケーション・メンテナンスの文を実行します。

  4. ALTER PLUGGABLE DATABASE APPLICATION ... END文を使用して操作を終了します。

スクリプト、SQL文またはGUIツールを使用してメンテナンスを実行します。

アプリケーションのインストール

アプリケーションのインストールは、マスター・アプリケーション定義の初期作成操作です。通常のインストールではユーザー・アカウント、表およびPL/SQLパッケージが作成されます。

アプリケーションをインストールするには、ALTER PLUGGABLE DATABASE APPLICATION文に次の項目を指定します。

  • アプリケーション名

  • アプリケーションのバージョン番号

例17-1 アプリケーションのインストール

この例では、saas_sales_acという名前のアプリケーション・コンテナにログインしていると仮定します。例ではバージョン1.0のsaas_sales_appというアプリケーションがインストールされます。バージョンを数値ではなく文字列で指定することに注意してください。このアプリケーションは、saas_sales_admという名前のアプリケーション共通ユーザーを作成し、必要な権限を付与してから、このユーザーとしてアプリケーション・ルートに接続します。このユーザーは、sales_mltという名前のメタデータリンク表を作成します。

-- Begin the install of saas_sales_app
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app BEGIN INSTALL '1.0';

-- Create the tablespace for the app
CREATE TABLESPACE saas_sales_tbs DATAFILE SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 200M;

-- Create the user account saas_sales_adm, which will own the application
CREATE USER saas_sales_adm IDENTIFIED BY manager CONTAINER=ALL;

-- Grant necessary privileges to this user account
GRANT CREATE SESSION, DBA TO saas_sales_adm;

-- Make the tablespace that you just created the default for saas_sales_adm
ALTER USER saas_sales_adm DEFAULT TABLESPACE saas_sales_tbs;

-- Now connect as the application owner
CONNECT saas_sales_adm/manager@saas_sales_ac

-- Create a metadata-linked table
CREATE TABLE saas_sales_adm.sales_mlt SHARING=METADATA
(YEAR       NUMBER(4),
 REGION     VARCHAR2(10),
 QUARTER    VARCHAR2(4),
 REVENUE    NUMBER);

-- End the application installation
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app END INSTALL '1.0';

PDBの同期化は、ユーザーがアプリケーション・ルートのアプリケーションを使用して開始するアプリケーションPDBの更新です。saas_sales_appアプリケーションを使用してアプリケーションPDBを同期化した後、各アプリケーションPDBにproducts_mltと呼ばれる空の表が格納されます。アプリケーションは、アプリケーションPDBに接続してから、この表にPDB固有の行を挿入できます。

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

アプリケーションのアップグレードはインストールされたアプリケーションへの大規模な変更です。

通常、アップグレードではアプリケーションの物理アーキテクチャが変更されます。たとえば、アップグレードによって新規のユーザー・アカウント、表およびパッケージが追加されたり、既存のオブジェクトの定義が変更されます。

アプリケーションをアップグレードするには、ALTER PLUGGABLE DATABASE APPLICATION文で次の項目を指定する必要があります。

  • アプリケーション名

  • 古いアプリケーションのバージョン番号

  • 新規のアプリケーションのバージョン番号

例17-2 自動による手法を使用したアプリケーションのアップグレード

この例では、管理者としてアプリケーション・ルートに接続し、アプリケーションsaas_sales_appをバージョン1.0からバージョン2.0にアップグレードします。アップグレードにより、countries_dltという名前のデータリンク表が作成され、その表に行が追加されます。また、zipcodes_edtという名前の拡張データリンク表が作成され、その表に行が追加されます。

-- Begin an upgrade of the app
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app 
  BEGIN UPGRADE '1.0' to '2.0';

-- Connect as app owner to app root
CONNECT saas_sales_adm/manager@saas_sales_ac

-- Create data-linked table named countries_dlt
CREATE TABLE countries_dlt SHARING=DATA
(country_id   NUMBER,
 country_name VARCHAR2(20));

-- Insert records into countries_dlt
INSERT INTO countries_dlt VALUES(1, 'USA');
INSERT INTO countries_dlt VALUES(44, 'UK');
INSERT INTO countries_dlt VALUES(86, 'China');
INSERT INTO countries_dlt VALUES(91, 'India');

-- Create an extended data-linked table named zipcodes_edt
CREATE TABLE zipcodes_edt SHARING=EXTENDED DATA
(code       VARCHAR2(5),
 country_id NUMBER,
 region     VARCHAR2(10));

-- Load rows into zipcodes_edt
INSERT INTO zipcodes_edt VALUES ('08820','1','East');
INSERT INTO zipcodes_edt VALUES ('10005','1','East');
INSERT INTO zipcodes_edt VALUES ('44332','1','North');
INSERT INTO zipcodes_edt VALUES ('94065','1','West');
INSERT INTO zipcodes_edt VALUES ('73301','1','South');
COMMIT;

-- End app upgrade
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app END UPGRADE TO '2.0';
アプリケーションのアップグレードの動作

アプリケーションのアップグレード中に、アプリケーションは引き続き使用可能です。この可用性を可能にするため、Oracle Databaseではアプリケーション・ルートがクローニングされます。

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

図17-1 アプリケーションのアップグレード

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

アップグレードは次のように実行されます。

  1. 初期の状態で、アプリケーション・ルートには特定のバージョンのアプリケーションがあります。

  2. ユーザーはALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE文を実行してから、アプリケーションのアップグレード文を発行します。

    アップグレード中にデータベースでは自動的に次の処理が実行されます。

    • アプリケーション・ルートをクローニングします

      たとえば、saas_sales_appアプリケーションがアプリケーション・ルートでバージョン1.0である場合、クローンもバージョン1.0になります。

    • アプリケーションPDBをアプリケーション・ルート・クローンに示します

      クローンは読取り専用モードです。アプリケーションはアプリケーションPDBに対して引き続き使用可能です。

  3. ユーザーはALTER PLUGGABLE DATABASE APPLICATION END UPGRADE文を実行します。

    この段階で、アプリケーションPDBは依然としてアプリケーション・ルート・クローンを示しており、元のアプリケーション・ルートが新規バージョンになります。たとえば、saas_sales_appアプリケーションがアプリケーション・ルートでバージョン1.0である場合、アップグレードによってこれがバージョン2.0になります。ただし、アプリケーション・ルート・クローンはバージョン1.0のままです。

  4. オプションで、SYNC句とともにALTER PLUGGABLE DATABASE APPLICATION文を発行することで、ユーザーはアプリケーションPDBをアップグレード済のアプリケーション・ルートと同期化します。

    たとえば、同期後に、一部のアプリケーションPDBはバージョン2.0のアプリケーション・ルートに接続されます。ただし、アプリケーション・ルート・クローンでは、バージョン1.0のままでいることが必要なアプリケーションPDBや、バージョン1.0のアプリケーション・ルートに接続される新規のアプリケーションPDBが引き続きサポートされます。

異なるバージョンのアプリケーション

異なるアプリケーションPDBが、異なるバージョンのアプリケーションを使用する場合があります。

たとえば、あるアプリケーションPDBにsaas_sales_appのバージョン1.0があるとします。同じアプリケーション・コンテナの別のアプリケーションPDBには、このアプリケーションのバージョン2.0があります。

ユースケースとしては、異なる顧客に提供されたSaaSアプリケーションがあります。個々の顧客に各自のアプリケーションPDBがある場合、中にはアプリケーションをアップグレードするまでより長期間待機する顧客がいます。この場合、あるアプリケーションPDBでは最新バージョンのアプリケーションが使用されますが、他のアプリケーションPDBでは古いバージョンが使用される可能性があります。

関連項目:

異なるバージョンのアプリケーションについてさらに学習するには、「アプリケーション・コンテナ内のアプリケーションのアップグレード」を参照してください

アプリケーション・パッチ

アプリケーション・パッチは、アプリケーションの小規模な変更です。

アプリケーションのパッチ適用の一般的な例として、バグ修正やセキュリティ・パッチがあります。パッチの内部では、新しいファンクションおよびパッケージが許可されます。

一般に、破壊的な操作は許可されません。たとえば、DROP文や、列の削除またはデータ型の変更を行うALTER TABLE文をパッチに含めることはできません。

Oracle Databaseのパッチ適用プロセスでOracle Databaseパッチで許可される操作の種類が制限されるのと同様、アプリケーションのパッチ適用プロセスではアプリケーション・パッチで許可される操作が制限されます。ある修正に「アプリケーション・パッチで操作がサポートされていません」というエラーを引き起こす操作が含まれる場合は、かわりにアプリケーションのアップグレードを実行してください。

ノート:

他のアプリケーションのパッチ適用またはアップグレードが進行中の間は、アプリケーションのパッチ適用ができません。

アプリケーションにパッチを適用するには、ALTER PLUGGABLE DATABASE APPLICATION文にアプリケーション名とパッチ番号を指定します。オプションで、アプリケーション最小バージョンを指定できます。

例17-3 自動による手法を使用したアプリケーションのパッチ適用

この例では、SYSTEMがアプリケーション・ルートにログインし、アプリケーションsaas_sales_appにバージョン1.0以上のパッチを適用します。パッチ101は、saas_sales_admとしてアプリケーション・コンテナにログインし、get_total_revenueという名前のメタデータリンクされたPL/SQLファンクションを作成します。

ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app BEGIN PATCH 101 MINIMUM VERSION '1.0';

-- Connect to the saas_sales_ac container as saas_sales_adm, who owns the application
CONNECT saas_sales_adm/*******@saas_sales_ac

-- Now install the get_total_revenue() function
CREATE FUNCTION get_total_revenue SHARING=METADATA (p_year IN NUMBER)
RETURN SYS_REFCURSOR
AS
c1_cursor SYS_REFCURSOR;
BEGIN
OPEN c1_cursor FOR
   SELECT a.year,sum(a.revenue)
   FROM containers(sales_data) a
   WHERE a.year = p_year
   GROUP BY a.year;
RETURN c1_cursor;
END;
/

-- End the patch
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app END PATCH 101;

既存のアプリケーションの移行

PDBにインストールされているアプリケーションを、アプリケーション・ルートまたはアプリケーションPDBのいずれかに移行できます。

既存のアプリケーションを移行する一般的な理由として、次のものがあります。

  • インストール・プログラムを使用するアプリケーション

    一部のアプリケーションは、スクリプトではなくインストール・プログラムを使用します。この場合は、新しいアプリケーション・ルートでインストール・プログラムを実行し、DBMS_PDB_ALTER_SHARINGパッケージを使用してオブジェクトを適切な共有モード(METADATADATAまたはEXTENDED DATA)に設定します。この変更はルートからアプリケーションPDBに自動的に伝播します。Oracle Databaseによってインストールの文ログが作成されるため、前のアプリケーション・バージョンのPDBはアプリケーション・ルートに接続できます。

  • 各PDBで別個に定義されたアプリケーション

    一部のアプリケーションは各PDBで定義されますが、アプリケーション・コンテナが存在しません。この場合は、インストール・スクリプトを更新して適切な共有モードを設定できます。アプリケーション・ルートを作成し、このルートでマスター・アプリケーション定義を作成します。既存のPDBをアプリケーションPDBとして採用するには、そのPDBをアプリケーション・ルートに接続し、共通定義への参照を使用して定義全体を置き換えるSQLスクリプトを実行します。

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

関連項目:

暗黙的に作成されるアプリケーション

ユーザー作成アプリケーション以外に、アプリケーション・コンテナには暗黙的に作成されるアプリケーションも含まれます。

ALTER PLUGGABLE DATABASE BEGIN文を最初に使用せずに、アプリケーション共通ユーザー操作がCONTAINER=ALL句によって発行されると、アプリケーション・ルートでアプリケーションが暗黙的に作成されます。

アプリケーション共通ユーザー操作には、CREATE USER文による共通ユーザーの作成や、ALTER USER文による共通ユーザーの変更などの操作が含まれます。データベースによって暗黙的アプリケーションにAPP$guid (guidはアプリケーション・ルートのグローバル一意ID)という名前が自動的に付けられます。暗黙的アプリケーションは、アプリケーション・ルートが初めて開かれたときに作成されます。

関連項目:

暗黙的に作成されるアプリケーションについてさらに学習するには、「アプリケーションPDB内のアプリケーションの同期」を参照してください

アプリケーションの同期化

アプリケーションPDB内で、同期化は、アプリケーション・ルートでの最新のバージョンおよびパッチへのユーザー始動のアプリケーションの更新です。

アプリケーション・ルートでアプリケーションをインストール、アップグレード、パッチ適用またはアンインストールした場合、その変更はアプリケーションPDBに自動的に伝播されません。PDBを手動で同期する必要があります。アプリケーションPDBの接続時に、ALTER PLUGGABLE DATABASE APPLICATION ... SYNCを発行することによって、1つ以上のアプリケーションを同期できます。

1つのアプリケーションの同期

SYNCの前に1つのアプリケーション名を指定すると、指定されたアプリケーションのみがデータベースによって同期化されます。

アプリケーションPDBで実行された次の文は、apexappをアプリケーションPDBと同期します。

ALTER PLUGGABLE DATABASE APPLICATION apexapp SYNC;

アプリケーションを特定のパッチ番号に同期するには、SYNC TO PATCH patchnum句を使用します。次の文では、saas_sales_appというアプリケーションがアプリケーションPDBのパッチ100と同期化されます。

ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app SYNC TO PATCH 100;

アプリケーションを特定のアプリケーション・バージョンに同期するには、SYNC TO versionを使用します。次の文では、saas_sales_appというアプリケーションがアプリケーションPDBのバージョン2.0と同期化されます。

ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app SYNC TO '2.0';
複数のアプリケーションの同期

複数のアプリケーションを名前でリストするか、ALLキーワードを指定できます。

名前によるアプリケーションの指定

SYNCの前に複数アプリケーション名をリストすると、指定されたアプリケーションがデータベースによって同期化されます。次の例では、apexappordsappの両方が同期されます。

ALTER PLUGGABLE DATABASE APPLICATION apexapp, ordsapp SYNC;

複数のアプリケーションを名前で指定する場合、SYNC TO PATCH patchno句およびSYNC TO version句はサポートされません。

ALLによるアプリケーションの指定

ALL SYNCを指定した場合は、暗黙的に作成されたアプリケーションを含むすべてのアプリケーションがデータベースによって同期されます。次の文は、すべてのアプリケーションを同期します。

ALTER PLUGGABLE DATABASE APPLICATION ALL SYNC;

指定したアプリケーションのサブセットを除くすべてのアプリケーションを同期するには、次のような文を使用します。

ALTER PLUGGABLE DATABASE APPLICATION ALL EXCEPT apexapp, ordsapp SYNC;

ALLを使用する場合、SYNC TO PATCH patchno句およびSYNC TO version句はサポートされません。

同期でのリプレイの順序

ALLまたは名前のリストを使用して複数のアプリケーションを指定する場合、アプリケーションのBEGINおよびENDブロックのリプレイ順序は、取得順序と同じになります。アプリケーションを次の順序でアップグレードするとします。

  1. apexapp1.0から2.0

  2. ordsapp1.0から2.0

  3. apexapp2.0から3.0

ALTER PLUGGABLE DATABASE APPLICATION apexapp, ordsapp SYNCという文は、同じ順序で文をリプレイします。apexappおよびordsappのオブジェクトが相互に依存している場合、リプレイの順序は機能の正確性のために重要です。ALTER PLUGGABLE DATABASE APPLICATION apexapp SYNCを実行してから、ALTER PLUGGABLE DATABASE APPLICATION ordsapp SYNCを実行すると、次の順序で文がリプレイされます。

  1. apexapp1.0から2.0

  2. apexapp2.0から3.0

  3. ordsapp1.0から2.0

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

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

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

ノート:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ノート:

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

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

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

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

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

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

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

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

関連項目:

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

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

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

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

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

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

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

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

アプリケーション・モジュール名およびサービス名

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

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

DBA_APPLICATIONSを問い合せて、APPLICATION BEGINが実行されたセッションのモジュール名を確認します。
SELECT app_capture_module FROM dba_applications WHERE app_name='APEX';

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

また、文をキャプチャするには、文を実行しているセッションのサービス名が、APPLICATION BEGINが実行されたセッションのサービス名と一致している必要があります。DBA_APPLICATIONSを問い合せて、APPLICATION BEGINが実行されたセッションのサービス名を確認します。
SELECT app_capture_service FROM dba_applications WHERE app_name='APEX';

例17-4 セッションのモジュール名のチェック

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

SQL> CONNECT / AS SYSDBA
Connected.

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

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

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

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

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

関連項目:

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

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

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

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

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

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

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

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

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

前提条件

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

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

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

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

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

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

    ALTER PLUGGABLE DATABASE APPLICATION application_name BEGIN INSTALL 'application_version_number';

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

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

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

    ALTER PLUGGABLE DATABASE APPLICATION application_name END INSTALL 'application_version_number';

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

    ALTER PLUGGABLE DATABASE APPLICATION salesapp END INSTALL '4.2';

    ノート:

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

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

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

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

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

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

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

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

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

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

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

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

ノート:

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

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

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

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

ノート:

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

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

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

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

ノート:

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

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

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

前提条件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ノート:

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

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

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

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

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

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

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

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

ノート:

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

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

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

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

前提条件

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

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

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

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

    ノート:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

前提条件

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

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

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

前提条件

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

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

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

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

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

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

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

アプリケーション・ルート内のアプリケーションをインストール、アップグレード、パッチ適用またはアンインストールした場合、そのアプリケーションPDBは、同期されるまで変更されません。アプリケーションPDBが現在のコンテナである場合は、次のいずれかの形式のALTER PLUGGABLE DATABASE APPLICATION ... SYNCを使用して手動で同期します。

  • 次のように単一のアプリケーションを同期します。ここでのapp1はアプリケーションの名前です。

    ALTER PLUGGABLE DATABASE APPLICATION app1 SYNC;

    オプションで、指定したパッチにapp1を同期するにはSYNC TO PATCH patchnoを、指定したバージョンにapp1を同期するにはSYNC TO versionを指定します。

  • 複数のアプリケーションを同期するには、次のようにします。ここで、app1app 2は個別のアプリケーションの名前です。

    ALTER PLUGGABLE DATABASE APPLICATION app1, app2 SYNC;
  • 次のようにすべてのアプリケーションを同期します。

    ALTER PLUGGABLE DATABASE APPLICATION ALL SYNC;
  • 指定したサブセットを除くすべてのアプリケーションを同期するには、次のようにします。ここで、app1およびapp2は除外するアプリケーションです。

    ALTER PLUGGABLE DATABASE APPLICATION ALL EXCEPT app1, app2 SYNC;

前提条件と制限

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

  • ALLまたは名前のリストを使用して複数のアプリケーションを指定する場合、SYNC TO句はサポートされません。

  • ALLまたは名前のリストを使用して複数のアプリケーションを指定すると、アプリケーションのBEGINおよびENDブロックが取得順にリプレイされます。アプリケーションが相互に依存している場合は、機能の正確性のために、単一の文でアプリケーションを同期する必要があります。

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

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

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

ALTER PLUGGABLE DATABASE APPLICATION salesapp SYNC;

例17-6 指定したパッチへのアプリケーションの同期

この例では、アプリケーションPDB内のsalesappというアプリケーションをパッチ100に同期します。

ALTER PLUGGABLE DATABASE APPLICATION salesapp SYNC TO PATCH 100;

例17-7 指定したアプリケーション・リリースへのアプリケーションの同期

この例では、アプリケーションPDB内のsalesappというアプリケーションを、そのアプリケーションのリリース2.0に同期します。

ALTER PLUGGABLE DATABASE APPLICATION salesapp SYNC TO '2.0';

例17-8 アプリケーションPDB内の複数のアプリケーションの同期

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

ALTER PLUGGABLE DATABASE APPLICATION salesapp, eusalesapp SYNC;

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

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

ALTER PLUGGABLE DATABASE APPLICATION ALL SYNC;

例17-10 サブセットを除くすべてのアプリケーションの同期

この例では、salesappを除くアプリケーションPDB内のすべてのアプリケーションを同期します。

ALTER PLUGGABLE DATABASE APPLICATION ALL EXCEPT salesapp SYNC;

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

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

ALTER PLUGGABLE DATABASE APPLICATION APP$CON SYNC;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      ノート:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      desc apptb

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

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

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

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

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

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

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

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

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

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

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

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

      desc apptb

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

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

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

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

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

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

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

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

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

  • ALTER PLUGGABLE DATABASE APPLICATION application_name SET COMPATIBILITY VERSION CURRENT;

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

ノート:

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

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

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

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

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

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

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

ALTER PLUGGABLE DATABASE APPLICATION salesapp 
  SET COMPATIBILITY VERSION CURRENT;

関連項目:

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

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

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

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

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

    ノート:

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

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

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

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

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

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

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

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

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

    ALTER PLUGGABLE DATABASE APPLICATION APP1 END INSTALL '1';

関連項目:

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

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

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

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

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

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

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

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

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

ノート:

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

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

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

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

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

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

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

    ノート:

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

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

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

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

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

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

  • 分析ビュー

  • 属性ディメンション

  • ディレクトリ

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

  • 階層

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

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

  • 順序

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

  • シノニム

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

  • トリガー

  • ビュー

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ノート:

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

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

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

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

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

ノート:

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

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

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

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

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

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

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

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

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

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

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

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

    ノート:

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

    ノート:

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

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

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

ALTER SYSTEM SET DEFAULT_SHARING=DATA SCOPE=BOTH;

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

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

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

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

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

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

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

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

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

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

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

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

ノート:

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

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

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

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

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

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

CONTAINERS句を使用した問合せ

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

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

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

前提条件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ALTER TABLE sh.customers ENABLE CONTAINERS_DEFAULT;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ノート:

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

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

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

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

    ノート:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ALTER PLUGGABLE DATABASE CONTAINERS DEFAULT TARGET = (APDB1);

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

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

ALTER PLUGGABLE DATABASE CONTAINERS DEFAULT TARGET = NONE;

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

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

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

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

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

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

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

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

マップ・オブジェクト

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

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

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

ノート:

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

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

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

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

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

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

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

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

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

関連項目:

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

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

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

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

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

SELECT employee_id 
FROM   hr.employees 
WHERE  department_id = 10;

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

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

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

コンテナ・マップの作成

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

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

前提条件

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

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

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

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

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

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

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

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

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

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

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

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

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

この例では、コンテナ・マップを使用する単純なアプリケーションを作成します。アプリケーション・コンテナに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である必要があります。これらの値は、コンテナ・マップが正常に動作していることを示します。

アプリケーション・コンテナ内のアプリケーションに関する情報の表示

複数のビューが、CDB内のアプリケーション・コンテナ内のアプリケーションに関する情報を提供します。

アプリケーションに関する情報の表示

DBA_APPLICATIONSビューは、アプリケーション・コンテナ内のアプリケーションに関する情報を提供します。

ノート:

DBA_APPLICATIONSビューは、現在のコンテナのみのアプリケーションに関する情報を提供します。現在のアプリケーション・コンテナ内のすべてのアプリケーションPDB内のアプリケーションに関する情報を表示するには、アプリケーション・ルートが現在のコンテナであるときに、DBA_APP_PDB_STATUSに問い合せます。

アプリケーション・コンテナ内のアプリケーションに関する情報を提供するには:

  1. SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。

  2. DBA_APPLICATIONSビューを問い合せます。

例17-24 アプリケーション・コンテナのアプリケーションに関する詳細の表示

この問合せは、アプリケーション・コンテナ内のユーザーが作成した各アプリケーションの名前、最新バージョンおよびステータスを表示します。

COLUMN APP_NAME FORMAT A15
COLUMN APP_VERSION FORMAT A15
COLUMN APP_STATUS FORMAT A15
 
SELECT APP_NAME, APP_VERSION, APP_STATUS
FROM   DBA_APPLICATIONS
WHERE  APP_IMPLICIT='N';

次のサンプル出力は、salesappアプリケーションを示しています。

APP_NAME        APP_VERSION     APP_STATUS
--------------- --------------- ---------------
SALESAPP        1.2             NORMAL

ノート:

Oracle Databaseは、アプリケーション共通ユーザー操作がALTER PLUGGABLE DATABASE APPLICATION BEGIN/END文の外部のCONTAINER=ALL句で発行されたときにいくつかのアプリケーションを暗黙的に作成します。サンプル問合せでは、WHERE句にAPP_IMPLICIT='N'を指定することで暗黙的に作成されたアプリケーションが除外されます。

アプリケーション・ステータスに関する情報の表示

DBA_APP_PDB_STATUSビューは、アプリケーション・コンテナ内のアプリケーションのステータスに関する情報を提供します。各アプリケーションPDB内の各アプリケーションのステータスを表示できます。

このビューは、アプリケーションPDBがクローズされている場合でも、アプリケーションPDB内のアプリケーションのステータスを表示できます。

ノート:

アプリケーション・ルートから問い合せた場合、DBA_APP_PDB_STATUSビューは現在のアプリケーション・コンテナ内のすべてのアプリケーションPDB内のアプリケーションに関する情報を提供します。現在のコンテナのアプリケーションに関する情報のみを表示するには、DBA_APPLICATIONSビューを問い合せます。

アプリケーション・コンテナ内のアプリケーション・ステータスに関する情報を表示するには:

  1. SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。

    「CDB内のコンテナへのアクセスについて」を参照してください。

  2. DBA_APP_PDB_STATUSビューを問い合せます。

例17-25 アプリケーション・ステータスに関する情報の表示

この問合せは、アプリケーションPDBの名前、アプリケーションの名前、アプリケーションのバージョン番号およびアプリケーションのステータスを表示します。

COLUMN PDB_NAME FORMAT A15
COLUMN APP_NAME FORMAT A15
COLUMN APP_VERSION FORMAT A20
COLUMN APP_STATUS FORMAT A12
 
SELECT p.PDB_NAME, s.APP_NAME, s.APP_VERSION, s.APP_STATUS
  FROM DBA_PDBS p, DBA_APP_PDB_STATUS s
  WHERE p.CON_UID = s.CON_UID;

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

PDB_NAME        APP_NAME        APP_VERSION          APP_STATUS
--------------- --------------- -------------------- ------------
SALES1          SALESAPP        4.2                  NORMAL

ノート:

アプリケーションのステータスは、アプリケーションが最新のバージョンと同期されていなくても、アプリケーションPDB内でNORMALであることがあります。他のステータスは、操作が進行中であるか、操作で問題が発生したことを示していることがあります。たとえば、UPGRADINGステータスは、アプリケーションのアップグレードがアプリケーションPDBで進行中であるか、アプリケーションPDBがアプリケーションをアップグレードしようとしたときにエラーが発生したことを示している可能性があります。

アプリケーション文に関する情報の表示

DBA_APP_STATEMENTSビューは、アプリケーションのインストール、アップグレードおよびパッチ操作中に発行されたSQL文に関する情報を提供します

Oracle Databaseでは、アプリケーションのインストール、アップグレードおよびパッチ操作中に発行されたすべてのSQL文が記録され、DBA_APP_STATEMENTSビューを問い合せることでこれらの文の履歴を表示できます。

アプリケーション操作中に発行されたSQL文に関する情報を表示するには:

  1. SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。

    「CDB内のコンテナへのアクセスについて」を参照してください。

  2. DBA_APP_STATEMENTSビューを問い合せます。

例17-26 アプリケーション文に関する情報の表示

この問合せは、アプリケーション・コンテナ内のアプリケーションに対するSQL文の文ID、取得時間、SQL文およびアプリケーション名を表示します。

SET LONG  8000
SET PAGES 8000
COLUMN STATEM_ID FORMAT NNNNN
COLUMN CAPTURE_TIME FORMAT A12
COLUMN APP_STATEMENT FORMAT A36
COLUMN APP_NAME FORMAT A15
 
SELECT STATEMENT_ID AS STATEM_ID, CAPTURE_TIME, APP_STATEMENT, APP_NAME
FROM   DBA_APP_STATEMENTS
ORDER BY STATEMENT_ID;

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

STATEM_ID CAPTURE_TIME APP_STATEMENT                        APP_NAME
--------- ------------ ------------------------------------ ---------------
        1 30-AUG-15    SYS                                  APP$1E87C094764
                                                            1142FE0534018F8
                                                            0AA6C5
        2 30-AUG-15    ALTER PLUGGABLE DATABASE APPLICATION APP$1E87C094764
                        APP$CON BEGIN INSTALL '1.0'         1142FE0534018F8
                                                            0AA6C5
        3 30-AUG-15    ALTER PLUGGABLE DATABASE APPLICATION APP$1E87C094764
                        APP$CON END INSTALL '1.0'           1142FE0534018F8
                                                            0AA6C5
        4 30-AUG-15    SYS                                  SALESAPP
        5 30-AUG-15    ALTER PLUGGABLE DATABASE APPLICATION SALESAPP
                        salesapp BEGIN INSTALL '1.0'
        6 30-AUG-15    CREATE TABLE oe.cmtb SHARING=METADAT SALESAPP
                       A (
                          value   VARCHAR2(30),
                          country VARCHAR2(30))
        7 30-AUG-15    CREATE TABLE conmap (                SALESAPP
                           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','CHIN
                       A','JAPAN'))
        8 30-AUG-15    ALTER TABLE oe.cmtb ENABLE CONTAINER SALESAPP
                       _MAP
        9 30-AUG-15    ALTER PLUGGABLE DATABASE APPLICATION SALESAPP
                        salesapp END INSTALL '1.0'
.
.
.

ノート:

Oracle Databaseは、アプリケーション共通ユーザー操作がALTER PLUGGABLE DATABASE APPLICATION BEGIN/END文の外部のCONTAINER=ALL句で発行されたときにいくつかのアプリケーションを暗黙的に作成します。これらのアプリケーションの名前はAPP$で開始し、サンプル出力はこれらのアプリケーションを表示します。

アプリケーション・バージョンに関する情報の表示

DBA_APP_VERSIONSビューは、アプリケーション・コンテナ内のアプリケーションのバージョンに関する情報を提供します。

Oracle Databaseは、アプリケーション・コンテナ内の各アプリケーションのバージョンを記録します。

アプリケーション・コンテナ内のアプリケーション・バージョンに関する情報を表示するには:

  1. SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。

    「CDB内のコンテナへのアクセスについて」を参照してください。

  2. DBA_APP_VERSIONSビューを問い合せます。

例17-27 アプリケーション・バージョンに関する情報の表示

この問合せは、バージョン化されているアプリケーションの名前、バージョン番号およびバージョンのコメントを表示します。

COLUMN APP_NAME FORMAT A15
COLUMN APP_VERSION FORMAT A20
COLUMN APP_VERSION_COMMENT FORMAT A25
 
SELECT APP_NAME, APP_VERSION, APP_VERSION_COMMENT
  FROM DBA_APP_VERSIONS;

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

APP_NAME        APP_VERSION          APP_VERSION_COMMENT
--------------- -------------------- -------------------------
SALESAPP        1.0                  Sales Application

アプリケーション・パッチに関する情報の表示

DBA_APP_PATCHESビューは、アプリケーション・コンテナ内のアプリケーション・パッチに関する情報を提供します。

Oracle Databaseは、アプリケーション・コンテナ内の各アプリケーションのパッチを記録します。

アプリケーション・コンテナ内のアプリケーション・パッチに関する情報を表示するには:

  1. SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。

    「CDB内のコンテナへのアクセスについて」を参照してください。

  2. DBA_APP_PATCHESビューを問い合せます。

例17-28 アプリケーション・パッチに関する情報の表示

この問合せは、アプリケーション・コンテナ内の各パッチについて、パッチが適用されたアプリケーションの名前、パッチ番号、パッチの最小アプリケーション・バージョンおよびパッチのステータスを表示します。

COLUMN APP_NAME FORMAT A15
COLUMN PATCH_NUMBER FORMAT NNNNNNNN
COLUMN PATCH_MIN_VERSION FORMAT A10
COLUMN PATCH_STATUS FORMAT A15
 
SELECT APP_NAME, PATCH_NUMBER, PATCH_MIN_VERSION, PATCH_STATUS
  FROM DBA_APP_PATCHES;

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

APP_NAME        PATCH_NUMBER PATCH_MIN_ PATCH_STATUS
--------------- ------------ ---------- ---------------
SALESAPP                   1 1.2        INSTALLED

アプリケーション・エラーに関する情報の表示

DBA_APP_ERRORSビューは、アプリケーションPDBがアプリケーション・ルート内のアプリケーションと同期する際に発生したエラーに関する情報を提供します。

アプリケーションPDBは、SYNC句を指定したALTER PLUGGABLE DATABASE APPLICATION文を発行します。各アプリケーションの最後の同期中に発生したエラーは、DBA_APP_ERRORSビューを問い合せることで表示できます。各アプリケーションの過去10回の同期中に発生したエラーは、DBA_APP_ERRORS_HISTORYビューを問い合せることで表示できます。

アプリケーションの同期中に発生したエラーに関する情報を表示するには:

  1. SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。

    「CDB内のコンテナへのアクセスについて」を参照してください。

  2. DBA_APP_ERRORSビューまたはDBA_APP_ERRORS_HISTORYビューを問い合せます。

例17-29 アプリケーション同期中に発生したエラーに関する詳細の表示

この問合せは、アプリケーション同期中に発生したエラーについて、アプリケーション名、エラーを生成したSQL文、エラー番号およびエラー・メッセージを表示します。

SET LONG  8000
SET PAGES 8000
COLUMN APP_NAME FORMAT A15
COLUMN APP_STATEMENT FORMAT A36
COLUMN ERRORNUM FORMAT NNNNNNNN
COLUMN ERRORMSG FORMAT A20

SELECT APP_NAME, APP_STATEMENT, ERRORNUM, ERRORMSG
  FROM DBA_APP_ERRORS;

アプリケーション・コンテナ内の共有データベース・オブジェクトのリスト

DBA_OBJECTSビューは、アプリケーション・コンテナ内の共有データベース・オブジェクトをリストできます。

共有データベース・オブジェクトは、メタデータリンク・アプリケーション共通オブジェクト、データリンク・アプリケーション共通オブジェクトおよび拡張データリンク・アプリケーション共通オブジェクトです。

アプリケーション・コンテナ内の共有データベース・オブジェクトをリストするには:

  1. SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。

    「CDB内のコンテナへのアクセスについて」を参照してください。

  2. DBA_OBJECTSビューを問い合せ、SHARING列を指定します。

例17-30 アプリケーション・コンテナ内のユーザーが作成した共有データベース・オブジェクトのリスト

この問合せは、アプリケーション・コンテナ内のユーザーが作成した共有データベース・オブジェクトの所有者と名前を表示します。各共有データベース・オブジェクトがメタデータリンク・アプリケーション共通オブジェクトとデータリンク・アプリケーション共通オブジェクトのぢちらであるかも表示します。問合せでは、オラクル社が提供する共有データベース・オブジェクトは除外されます。

COLUMN OWNER FORMAT A15
COLUMN OBJECT_NAME FORMAT A25
COLUMN SHARING FORMAT A13 

SELECT OWNER, OBJECT_NAME, SHARING 
   FROM DBA_OBJECTS WHERE SHARING != 'NONE' 
   AND ORACLE_MAINTAINED = 'N';

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

OWNER           OBJECT_NAME               SHARING
--------------- ------------------------- -------------
SALESADM        CONMAP                    METADATA LINK
OE              PRODUCT_DESCRIPTIONS_OB   DATA LINK
OE              CMTB                      METADATA LINK

アプリケーション・コンテナ内の拡張データリンク・オブジェクトのリスト

DBA_TABLESおよびDBA_VIEWSビューは、アプリケーション・コンテナ内の拡張データリンク・オブジェクトをリストできます。

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

アプリケーション・コンテナ内の拡張データリンク・オブジェクトをリストするには:

  1. SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。

    「CDB内のコンテナへのアクセスについて」を参照してください。

  2. DBA_TABLESまたはDBA_VIEWSビューを問い合せ、WHERE句にEXTENDED_DATA_LINK='YES'を指定します。

例17-31 アプリケーション・コンテナ内の拡張データリンク表の表示

この問合せは、アプリケーション・コンテナ内の拡張データリンク表の所有者と名前を表示します。

COLUMN OWNER FORMAT A20
COLUMN TABLE_NAME FORMAT A30
 
SELECT OWNER, TABLE_NAME FROM DBA_TABLES WHERE EXTENDED_DATA_LINK='YES';

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

OWNER                TABLE_NAME
-------------------- ------------------------------
SALESADM             ZIPCODES