17 アプリケーション・コンテナの管理
アプリケーション・コンテナにインストールされるアプリケーションをインストールおよび管理できます。
ノート:
この章のタスクは、SQL*PlusまたはOracle SQL Developerを使用して実行できます。- アプリケーション・コンテナ内のアプリケーションの概要
アプリケーション・コンテナ内で、アプリケーションはアプリケーション・ルートに格納される共通データおよびメタデータの名前付けおよびバージョニングされたセットです。 - アプリケーション・ルートの変更について
ALTER DATABASE
文でアプリケーション・ルートを変更できます。ALTER PLUGGABLE DATABASE
文では、アプリケーションPDBのオープン・モードを変更できます。 - アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・コンテナ内のアプリケーションをインストール、アップグレードまたはパッチ適用します。 - アプリケーション共通オブジェクトの管理
アプリケーション共通オブジェクトは、アプリケーション・コンテナ内の共有されるユーザー作成データベース・オブジェクトです。アプリケーション共通オブジェクトは、アプリケーション・ルートに作成されます。 - アプリケーション・コンテナ内のコンテナに対するDML文の発行
アプリケーション・ルートで発行されるDML文では、アプリケーション・コンテナ内の1つ以上のコンテナを変更できます。また、DML文に対して1つ以上のデフォルト・コンテナ・ターゲットを指定できます。 - コンテナ・マップを使用したPDBでのパーティション化
コンテナ・マップにより、データが表レベルで物理的にパーティション化されていない場合にデータをアプリケーションPDBレベルでパーティション化できます。 - アプリケーション・コンテナ内のアプリケーションに関する情報の表示
複数のビューが、CDB内のアプリケーション・コンテナ内のアプリケーションに関する情報を提供します。
親トピック: マルチテナント環境の管理
アプリケーション・コンテナ内のアプリケーションの概要
アプリケーション・コンテナ内で、アプリケーションはアプリケーション・ルートに格納される共通データおよびメタデータの名前付けおよびバージョニングされたセットです。
アプリケーション・コンテナのコンテキストでは、「アプリケーション」という用語は「マスター・アプリケーション定義」を意味します。たとえば、表、ビュー、パッケージなどの定義をアプリケーションに含めることができます。
- アプリケーション・コンテナの管理について
アプリケーション・コンテナの管理の一部の側面はCDBルートおよびCDB全体の管理に似ていますが、その他の側面はPDBの管理に似ています。 - アプリケーション・メンテナンス
このコンテキストにおけるアプリケーション・メンテナンスは、アプリケーションのインストール、アンインストール、アップグレードまたはパッチ適用を指します。 - 既存のアプリケーションの移行
PDBにインストールされているアプリケーションを、アプリケーション・ルートまたはアプリケーション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に作成できません。 |
- 透過的データ暗号化およびアプリケーション・コンテナ
TDEをアプリケーション・コンテナとともに使用するベスト・プラクティスです。
親トピック: アプリケーション・コンテナ内のアプリケーションの概要
透過的データ暗号化およびアプリケーション・コンテナ
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としてウォレットをオープンする方法がなく、そのウォレットへの接続は許可されません。
関連トピック
親トピック: アプリケーション・コンテナの管理について
アプリケーション・メンテナンス
このコンテキストにおけるアプリケーション・メンテナンスは、アプリケーションのインストール、アンインストール、アップグレードまたはパッチ適用を指します。
アプリケーションには名前およびバージョン番号が必要です。このプロパティの組合せによって、実行可能なメンテナンス作業が決まります。すべてのメンテナンス作業で、次のステップを実行します。
-
ALTER PLUGGABLE DATABASE ... APPLICATION
文をBEGIN INSTALL
句、BEGIN UPGRADE
句またはBEGIN PATCH
句とともに実行することで開始します。 -
文を実行してアプリケーションを変更します。
-
ALTER PLUGGABLE DATABASE ... APPLICATION
文をEND INSTALL
句、END UPGRADE
句またはEND PATCH
句とともに実行することで終了します。
アプリケーションの発展に伴って、アプリケーション・コンテナではバージョンおよびパッチの変更がすべて保守されます。
ノート:
- アプリケーション・メンテナンスについて
ALTER PLUGGABLE DATABASE APPLICATION
文を使用して、アプリケーションのインストール、アップグレードおよびパッチ適用操作を実行します。 - アプリケーションのインストール
アプリケーションのインストールは、マスター・アプリケーション定義の初期作成操作です。通常のインストールではユーザー・アカウント、表およびPL/SQLパッケージが作成されます。 - アプリケーションのアップグレード
アプリケーションのアップグレードはインストールされたアプリケーションへの大規模な変更です。 - アプリケーション・パッチ
アプリケーション・パッチは、アプリケーションの小規模な変更です。
親トピック: アプリケーション・コンテナ内のアプリケーションの概要
アプリケーション・メンテナンスについて
ALTER PLUGGABLE DATABASE APPLICATION
文を使用して、アプリケーションのインストール、アップグレードおよびパッチ適用操作を実行します。
アプリケーション・メンテナンスの基本的なステップは、次のとおりです。
-
アプリケーション・ルートにログインします。
-
アプリケーション・ルートで
ALTER PLUGGABLE DATABASE APPLICATION ... BEGIN
文を使用して操作を開始します。 -
アプリケーション・メンテナンスの文を実行します。
-
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ではアプリケーション・ルートがクローニングされます。 - 異なるバージョンのアプリケーション
異なるアプリケーションPDBが、異なるバージョンのアプリケーションを使用する場合があります。
親トピック: アプリケーション・メンテナンス
アプリケーションのアップグレードの動作
アプリケーションのアップグレード中に、アプリケーションは引き続き使用可能です。この可用性を可能にするため、Oracle Databaseではアプリケーション・ルートがクローニングされます。
次の図で、アプリケーションのアップグレード・プロセスの概要を示します。
アップグレードは次のように実行されます。
-
初期の状態で、アプリケーション・ルートには特定のバージョンのアプリケーションがあります。
-
ユーザーは
ALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE
文を実行してから、アプリケーションのアップグレード文を発行します。アップグレード中にデータベースでは自動的に次の処理が実行されます。
-
アプリケーション・ルートをクローニングします
たとえば、
saas_sales_app
アプリケーションがアプリケーション・ルートでバージョン1.0である場合、クローンもバージョン1.0になります。 -
アプリケーションPDBをアプリケーション・ルート・クローンに示します
クローンは読取り専用モードです。アプリケーションはアプリケーションPDBに対して引き続き使用可能です。
-
-
ユーザーは
ALTER PLUGGABLE DATABASE APPLICATION END UPGRADE
文を実行します。この段階で、アプリケーションPDBは依然としてアプリケーション・ルート・クローンを示しており、元のアプリケーション・ルートが新規バージョンになります。たとえば、
saas_sales_app
アプリケーションがアプリケーション・ルートでバージョン1.0である場合、アップグレードによってこれがバージョン2.0になります。ただし、アプリケーション・ルート・クローンはバージョン1.0のままです。 -
オプションで、
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
パッケージを使用してオブジェクトを適切な共有モード(METADATA
、DATA
またはEXTENDED DATA
)に設定します。この変更はルートからアプリケーションPDBに自動的に伝播します。Oracle Databaseによってインストールの文ログが作成されるため、前のアプリケーション・バージョンのPDBはアプリケーション・ルートに接続できます。 -
各PDBで別個に定義されたアプリケーション
一部のアプリケーションは各PDBで定義されますが、アプリケーション・コンテナが存在しません。この場合は、インストール・スクリプトを更新して適切な共有モードを設定できます。アプリケーション・ルートを作成し、このルートでマスター・アプリケーション定義を作成します。既存のPDBをアプリケーションPDBとして採用するには、そのPDBをアプリケーション・ルートに接続し、共通定義への参照を使用して定義全体を置き換えるSQLスクリプトを実行します。
たとえば、Oracle Database 12c CDBに接続中のPDBにインストールされているアプリケーションを、Oracle Database 18c CDBのアプリケーション・コンテナに移行できます。
関連項目:
-
既存アプリケーションの移行方法を学習するには、「アプリケーションの管理について」を参照してください。
-
DBMS_PDB_ALTER_SHARING
パッケージについてさらに学習するには、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください
親トピック: アプリケーション・コンテナ内のアプリケーションの概要
暗黙的に作成されるアプリケーション
ユーザー作成アプリケーション以外に、アプリケーション・コンテナには暗黙的に作成されるアプリケーションも含まれます。
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つ以上のアプリケーションを同期できます。
- 単一のアプリケーションの同期
SYNC
の前に1つのアプリケーション名を指定した場合は、指定されたアプリケーションのみがデータベースによって同期されます。 - 複数のアプリケーションの同期
複数のアプリケーションを名前でリストするか、ALL
キーワードを指定できます。
親トピック: アプリケーション・コンテナ内のアプリケーションの概要
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
の前に複数アプリケーション名をリストすると、指定されたアプリケーションがデータベースによって同期化されます。次の例では、apexapp
とordsapp
の両方が同期されます。
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
ブロックのリプレイ順序は、取得順序と同じになります。アプリケーションを次の順序でアップグレードするとします。
-
apexapp
を1.0
から2.0
へ -
ordsapp
を1.0
から2.0
へ -
apexapp
を2.0
から3.0
へ
ALTER PLUGGABLE DATABASE APPLICATION apexapp, ordsapp SYNC
という文は、同じ順序で文をリプレイします。apexapp
およびordsapp
のオブジェクトが相互に依存している場合、リプレイの順序は機能の正確性のために重要です。ALTER PLUGGABLE DATABASE APPLICATION apexapp SYNC
を実行してから、ALTER PLUGGABLE DATABASE APPLICATION ordsapp SYNC
を実行すると、次の順序で文がリプレイされます。
-
apexapp
を1.0
から2.0
へ -
apexapp
を2.0
から3.0
へ -
ordsapp
を1.0
から2.0
へ
親トピック: アプリケーションの同期化
アプリケーション・ルートの変更について
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はアプリケーション・ルート内のアプリケーションと同期できます。
- アプリケーション・メンテナンスの基本的なステップ
アプリケーション・ルート内にアプリケーションをインストール、アップグレードおよびパッチ適用できます。 - アプリケーションのバージョン
アプリケーション・コンテナは、アプリケーションのバージョンとアプリケーションのパッチも管理します。 - アプリケーション・モジュール名およびサービス名
アプリケーション・モジュール名は、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
が発行されたセッションとモジュール名が一致するセッションのみが取得対象とみなされます。
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にインストールされます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・コンテナ内のアプリケーションのインストールについて
アプリケーション・ルートにアプリケーションをインストールするには、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は、同期されるまで変更されません。アプリケーションPDBが現在のコンテナである場合は、次のいずれかの形式のALTER PLUGGABLE DATABASE APPLICATION ... SYNC
を使用して手動で同期します。
-
次のように単一のアプリケーションを同期します。ここでのapp1はアプリケーションの名前です。
ALTER PLUGGABLE DATABASE APPLICATION app1 SYNC;
オプションで、指定したパッチにapp1を同期するには
SYNC TO PATCH patchno
を、指定したバージョンにapp1を同期するにはSYNC TO version
を指定します。 -
複数のアプリケーションを同期するには、次のようにします。ここで、app1とapp 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
ブロックが取得順にリプレイされます。アプリケーションが相互に依存している場合は、機能の正確性のために、単一の文でアプリケーションを同期する必要があります。
- SQL*Plusで、現在のコンテナがアプリケーションPDBであることを確認します。
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は、アプリケーション・ルートとアプリケーション・ルートのレプリカを同期できます。 - アプリケーション・ルート・レプリカを参照するプロキシPDBの作成
複数のアプリケーション・コンテナが同じアプリケーションを実行する場合、アプリケーション・コンテナ内のアプリケーションはプロキシPDBを使用して同期を維持できます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・ルート・レプリカのプロキシPDBとの同期について
プロキシPDBは、アプリケーション・ルートとアプリケーション・ルートのレプリカを同期できます。
1つのアプリケーションを複数のアプリケーション・コンテナにインストールできます。プロキシPDBを使用すると、アプリケーションをより効率的にインストール、アップグレードおよびパッチ適用できます。
この構成では、1つのアプリケーション・コンテナにマスター・アプリケーション・ルートがあります。マスター・アプリケーション・ルートは、アプリケーションをインストール、アップグレードおよびパッチ適用する場所です。アプリケーション・ルート・レプリカは、マスター・アプリケーション・ルートの完全なコピーです。各アプリケーション・ルート・レプリカは、マスター・アプリケーション・ルート内のプロキシPDBによって参照されます。
プロキシPDBは、マスター・アプリケーション・ルート内のアプリケーション変更と同期されると、その変更を参照先のアプリケーション・ルート・レプリカに伝播します。アプリケーション・ルート・レプリカが同期された後、アプリケーション・ルート・レプリカに接続されているアプリケーションPDBは、レプリカと同期する方法で変更を取得できます。
次の図に、プロキシPDBを使用してアプリケーション・ルート・レプリカを同期する構成を示します。
また、アプリケーション・ルート・レプリカが構成され、固有のアプリケーションPDBを持つ場合、マスター・アプリケーション・ルート内のCONTAINERS
句を含む問合せは、現在のアプリケーション・コンテナおよびアプリケーション・ルート・レプリカのあるアプリケーション・コンテナからのデータを返すことができます。問合せは、アプリケーション・ルート・レプリカおよびレプリカに接続しているオープンされたアプリケーションPDBからの結果を表示できます。
アプリケーション・ルート・レプリカを参照するプロキシ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
マスター・アプリケーション・ルート内のプロキシ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-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 BEGIN
と ALTER PLUGGABLE DATABASE APPLICATION END
文の間に正しいSQL*Loaderモジュール名を指定する必要があります。モジュール名はSQL Loader Conventional Path Load
です。
例17-15 アプリケーションのインストール中の従来型パス・ロードの実行
この例では、従来型パス・ロードがアプリケーション・ルートで実行されます。
-
SQL*Plusで、アプリケーション・ルートに切り替えます。
ALTER SESSION SET CONTAINER=cdb1_approot1;
-
正しいモジュールを設定します。
BEGIN DBMS_APPLICATION_INFO.SET_MODULE( 'SQL Loader Conventional Path Load', ''); END;
-
アプリケーションのインストールを開始します。
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-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_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-18 データリンク・オブジェクトの作成
この例では、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-19 拡張データリンク・オブジェクトの作成
この例では、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-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を発行できます。 - データリンク共通オブジェクトに対する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-21 アプリケーション・コンテナ内のDML文のデフォルト・コンテナの指定
この例では、APDB1
がアプリケーション・コンテナ内のDML文のデフォルト・コンテナであることを指定します。
ALTER PLUGGABLE DATABASE CONTAINERS DEFAULT TARGET = (APDB1);
例17-22 デフォルト・コンテナのクリア
この例は、デフォルト・コンテナ設定をクリアしています。設定されていない場合、デフォルト・コンテナはアプリケーション・ルートです。
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-23 コンテナ・マップの作成と使用
この例では、コンテナ・マップを使用する単純なアプリケーションを作成します。アプリケーション・コンテナに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でのパーティション化
アプリケーション・コンテナ内のアプリケーションに関する情報の表示
複数のビューが、CDB内のアプリケーション・コンテナ内のアプリケーションに関する情報を提供します。
- アプリケーションに関する情報の表示
DBA_APPLICATIONS
ビューは、アプリケーション・コンテナ内のアプリケーションに関する情報を提供します。 - アプリケーション・ステータスに関する情報の表示
DBA_APP_PDB_STATUS
ビューは、アプリケーション・コンテナ内のアプリケーションのステータスに関する情報を提供します。各アプリケーションPDB内の各アプリケーションのステータスを表示できます。 - アプリケーション文に関する情報の表示
DBA_APP_STATEMENTS
ビューは、アプリケーションのインストール、アップグレードおよびパッチ操作中に発行されたSQL文に関する情報を提供します。 - アプリケーションのバージョンに関する情報の表示
DBA_APP_VERSIONS
ビューは、アプリケーション・コンテナ内のアプリケーションのバージョンに関する情報を提供します。 - アプリケーション・パッチに関する情報の表示
DBA_APP_PATCHES
ビューは、アプリケーション・コンテナ内のアプリケーション・パッチに関する情報を提供します。 - アプリケーション・エラーに関する情報の表示
DBA_APP_ERRORS
ビューは、アプリケーションPDBがアプリケーション・ルート内のアプリケーションと同期する際に発生したエラーに関する情報を提供します。 - アプリケーション・コンテナ内の共有データベース・オブジェクトのリスト
DBA_OBJECTS
ビューは、アプリケーション・コンテナ内の共有データベース・オブジェクトをリストできます。 - アプリケーション・コンテナ内の拡張データリンク・オブジェクトのリスト
DBA_TABLES
およびDBA_VIEWS
ビューは、アプリケーション・コンテナ内の拡張データリンク・オブジェクトをリストできます。
親トピック: アプリケーション・コンテナの管理
アプリケーションに関する情報の表示
DBA_APPLICATIONS
ビューは、アプリケーション・コンテナ内のアプリケーションに関する情報を提供します。
ノート:
DBA_APPLICATIONS
ビューは、現在のコンテナのみのアプリケーションに関する情報を提供します。現在のアプリケーション・コンテナ内のすべてのアプリケーションPDB内のアプリケーションに関する情報を表示するには、アプリケーション・ルートが現在のコンテナであるときに、DBA_APP_PDB_STATUS
に問い合せます。
アプリケーション・コンテナ内のアプリケーションに関する情報を提供するには:
-
SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。
-
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
ビューを問い合せます。
アプリケーション・コンテナ内のアプリケーション・ステータスに関する情報を表示するには:
-
SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。
「CDB内のコンテナへのアクセスについて」を参照してください。
-
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文に関する情報を表示するには:
-
SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。
「CDB内のコンテナへのアクセスについて」を参照してください。
-
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は、アプリケーション・コンテナ内の各アプリケーションのバージョンを記録します。
アプリケーション・コンテナ内のアプリケーション・バージョンに関する情報を表示するには:
-
SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。
「CDB内のコンテナへのアクセスについて」を参照してください。
-
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は、アプリケーション・コンテナ内の各アプリケーションのパッチを記録します。
アプリケーション・コンテナ内のアプリケーション・パッチに関する情報を表示するには:
-
SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。
「CDB内のコンテナへのアクセスについて」を参照してください。
-
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がアプリケーション・ルート内のアプリケーションと同期する際に発生したエラーに関する情報を提供します。
SYNC
句を指定したALTER PLUGGABLE DATABASE APPLICATION
文を発行します。各アプリケーションの最後の同期中に発生したエラーは、DBA_APP_ERRORS
ビューを問い合せることで表示できます。各アプリケーションの過去10回の同期中に発生したエラーは、DBA_APP_ERRORS_HISTORY
ビューを問い合せることで表示できます。
アプリケーションの同期中に発生したエラーに関する情報を表示するには:
-
SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。
「CDB内のコンテナへのアクセスについて」を参照してください。
-
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
ビューは、アプリケーション・コンテナ内の共有データベース・オブジェクトをリストできます。
アプリケーション・コンテナ内の共有データベース・オブジェクトをリストするには:
-
SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。
「CDB内のコンテナへのアクセスについて」を参照してください。
-
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に共通です
アプリケーション・コンテナ内の拡張データリンク・オブジェクトをリストするには:
-
SQL*Plusで、アプリケーション・コンテナのアプリケーション・ルートにアクセスします。
「CDB内のコンテナへのアクセスについて」を参照してください。
-
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
関連項目: