44 SQL*Plusを使用したアプリケーション・コンテナの管理
アプリケーション・ルートとアプリケーションPDBを含むアプリケーション・コンテナを管理できます。アプリケーション・コンテナにインストールされているアプリケーションも管理できます。
注意:
この章のタスクは、SQL*PlusまたはOracle SQL Developerを使用して実行できます。- SQL*Plusを使用したアプリケーション・コンテナの管理について
アプリケーション・コンテナの管理の一部の側面はCDBルートおよびCDB全体の管理に似ていますが、アプリケーション・コンテナの管理のその他の側面はPDBの管理に似ています。 - アプリケーション・ルートの変更について
ALTER
DATABASE
文でアプリケーション・ルートを変更できます。ALTER
PLUGGABLE
DATABASE
文では、1つ以上のアプリケーションPDBのオープン・モードを変更できます。 - アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・コンテナ内のアプリケーションをインストール、アップグレードまたはパッチ適用できます。アプリケーション・コンテナからアプリケーションをアンインストールすることもできます。アプリケーション・ルートでこれらの操作を実行すると、アプリケーションPDBがアプリケーション・ルート内のアプリケーションと同期するときに、アプリケーション・コンテナによってアプリケーションの変更がアプリケーションPDBに伝播されます。 - アプリケーション共通オブジェクトの管理
アプリケーション共通オブジェクトは、アプリケーション・コンテナ内の共有されるユーザー作成データベース・オブジェクトです。アプリケーション共通オブジェクトは、アプリケーション・ルートに作成されます。 - アプリケーション・コンテナ内のコンテナに対するDML文の発行
アプリケーション・ルートで発行されるDML文では、アプリケーション・コンテナ内の1つ以上のコンテナを変更できます。また、DML文に対して1つ以上のデフォルト・コンテナ・ターゲットを指定できます。 - コンテナ・マップを使用したPDBによるパーティション化
コンテナ・マップにより、データが表レベルで物理的にパーティション化されていない場合にデータをアプリケーションPDBレベルでパーティション化できます。
親トピック: マルチテナント環境の管理
44.1 SQL*Plusを使用したアプリケーション・コンテナの管理について
アプリケーション・コンテナの管理の一部の側面はCDBルートおよびCDB全体の管理に似ていますが、アプリケーション・コンテナの管理のその他の側面はPDBの管理に似ています。
アプリケーション・コンテナの管理は、アプリケーション・ルートとアプリケーション・ルートに接続されるアプリケーションPDBの両方を管理できるため、CDBの管理と似ています。ただし、アプリケーション・コンテナの管理は、アプリケーション・コンテナに対する変更が他のアプリケーション・コンテナやCDB内のPDBに影響しないため、PDBの管理にも似ています。
次の表では、CDBまたはCDBルートを管理する管理タスクに似たアプリケーション・コンテナの管理タスクについて説明します。
表44-1 CDBの管理に似たアプリケーション・コンテナ管理タスク
管理タスク | 説明 | 詳細情報 |
---|---|---|
アプリケーション共通ユーザーおよび共通して付与される権限の構成 |
アプリケーション共通ユーザーおよび権限は、CDBルートの共通ユーザーおよび共通して付与される権限に似ていますが、アプリケーション・コンテナでは、共通ユーザーおよび共通して付与される権限は、アプリケーション・ルート、アプリケーション・ルートに属するアプリケーションPDB、アプリケーション・ルートに属するオプションのアプリケーション・シードなど、アプリケーション・コンテナのコンテナ内にのみ存在します。 |
|
アプリケーション・コンテナの作成 |
現在のコンテナがCDBルートである共通ユーザーは、CDBルートに接続されるアプリケーション・コンテナを作成できます。これを行うには、 |
|
アプリケーションPDBの作成 |
現在のコンテナがアプリケーション・ルートである共通ユーザーは、アプリケーション・ルートに接続されるアプリケーションPDBを作成できます。 |
|
コンテナの切替え |
適切な権限を持つユーザーは、アプリケーション・ルート、アプリケーション・ルートに属するアプリケーションPDB、アプリケーション・ルートに属するオプションのアプリケーション・シードなど、アプリケーション・コンテナ内のコンテナ間を切り替えることができます。 |
|
|
|
|
データ定義言語(DDL)文の発行 |
アプリケーション・コンテナでは、DDL文をアプリケーション・コンテナ内のすべてのコンテナに適用できる場合も、現在のコンテナにのみ適用できる場合もあります。 |
次の表では、PDBを管理する管理タスクに似たアプリケーション・コンテナの管理タスクについて説明します。
表44-2 PDBの管理に似たアプリケーション・コンテナ管理タスク
管理タスク | 説明 | 詳細情報 |
---|---|---|
アプリケーション・ルートへの接続 |
アプリケーション・ルートには固有のサービス名があり、ユーザーはPDBに接続するのと同じ方法でアプリケーション・ルートに接続できます。同様に、各アプリケーションPDBには固有のサービス名があり、アプリケーション・シードには固有のサービス名があります。 |
|
|
|
|
SQL*Plusの |
SQL*Plusの |
|
|
|
|
表領域の管理 |
管理者は、アプリケーション・ルートおよびアプリケーションPDBの表領域を作成、変更および削除できます。各コンテナには固有の表領域があります。 |
|
データファイルおよび一時ファイルの管理 |
管理者は、アプリケーション・ルートおよびアプリケーションPDBのデータファイルおよび一時ファイルを作成、変更および削除できます。各コンテナには固有のファイルがあります。 |
|
スキーマ・オブジェクトの管理 |
PDBで行うのと同じ方法で、アプリケーション・ルートおよび各アプリケーションPDB内のスキーマ・オブジェクトを作成、変更および削除できます。特定のアプリケーション・ルートまたはアプリケーションPDBで起動するトリガーを作成することもできます。 ただし、アプリケーション・コンテナではアプリケーション共通オブジェクトがサポートされ、アプリケーション・コンテナ内のコンテナ間で共有できます。アプリケーション共通オブジェクトはPDBに作成できません。 |
44.2 アプリケーション・ルートの変更について
ALTER
DATABASE
文でアプリケーション・ルートを変更できます。ALTER
PLUGGABLE
DATABASE
文では、1つ以上のアプリケーションPDBのオープン・モードを変更できます。
表44-3に、アプリケーション・ルートで発行されたALTER
DATABASE
およびALTER
PLUGGABLE
DATABASE
文の句によって変更されるコンテナを示します。表には、アプリケーション・ルートで許可されない文もリストしています。
注意:
現在のコンテナがアプリケーション・ルートであるときに発行された文は、CDBルート、または現在のアプリケーション・ルートに属していないPDBには影響しません。表44-3 アプリケーション・ルートのコンテナを変更する文
アプリケーション・ルートのみの変更 | 1つ以上のアプリケーションPDBの変更 | アプリケーション・ルートで発行できない |
---|---|---|
現在のコンテナがアプリケーション・ルートであるアプリケーション共通ユーザーとして接続した場合、次の句を含む 次の句を含む これらの句を使用すると、特定のアプリケーションPDBにデフォルト以外の値を設定できます。 |
現在のコンテナがアプリケーション・ルートであるアプリケーション共通ユーザーとして接続した場合、次の句を含む 現在のコンテナがアプリケーションPDBである場合、この句を含む 現在のコンテナがアプリケーション・ルートであるアプリケーション共通ユーザーとして接続した場合、次の句を含む |
現在のコンテナがアプリケーション・ルートであるアプリケーション共通ユーザーとして接続した場合、次の句を含む |
44.3 アプリケーション・コンテナ内のアプリケーションの管理
アプリケーション・コンテナ内にアプリケーションをインストール、アップグレードまたはパッチ適用します。アプリケーション・コンテナからアプリケーションをアンインストールすることもできます。アプリケーション・ルートでこれらの操作を実行すると、アプリケーションPDBがアプリケーション・ルート内のアプリケーションと同期するときに、アプリケーション・コンテナによってアプリケーションの変更がアプリケーションPDBに伝播されます。
- アプリケーション・コンテナ内のアプリケーションの管理について
アプリケーション・コンテナでは、アプリケーションは名前付きのバージョン管理されたアプリケーション・メタデータおよび共通データのセットです。通常のアプリケーションは、アプリケーション共通ユーザーおよびアプリケーション共通オブジェクトをインストールします。 - アプリケーション・コンテナへのアプリケーションのインストール
アプリケーション・コンテナにアプリケーションをインストールできます。 - アプリケーション・コンテナ内のアプリケーションのアップグレード
アプリケーションに対する大きな変更によってアプリケーション・アップグレードが構成されます。アプリケーション・コンテナのアプリケーションをアップグレードできます。 - アプリケーション・コンテナ内のアプリケーションのパッチ適用
アプリケーションに対する小さな変更によってアプリケーション・パッチが構成されます。小さな変更の例として、バグ修正やセキュリティ・パッチがあります。アプリケーション・コンテナのアプリケーションにパッチ適用できます。 - アプリケーション・コンテナへの既存のアプリケーションの移行
PDBにインストールされているアプリケーションをアプリケーション・コンテナに移行できます。アプリケーションは、アプリケーション・ルートまたはアプリケーションPDBに移行できます。たとえば、Oracle Database 12cリリース1 (12.1) CDBに接続中のPDBにインストールされているアプリケーションを、Oracle Database 12cリリース2 (12.2) CDBのアプリケーション・コンテナに移行できます。 - アプリケーションPDB内のアプリケーションの同期
アプリケーション・ルートのアプリケーションがインストール、アップグレード、パッチ適用またはアンインストールされる場合、アプリケーション・ルートに属するアプリケーションPDBは同期されるまで変更されません。アプリケーションの同期により、アプリケーションPDB内のアプリケーションがアプリケーション・ルートの最新バージョンおよびパッチに更新されます。 - アプリケーション・ルート・レプリカとプロキシPDBの同期
異なるCDB内のアプリケーション・コンテナが同じアプリケーションを持つ場合、それらのアプリケーション・ルートは、マスター・アプリケーション・ルート、レプリカ・アプリケーション・ルートおよびプロキシPDBを作成することで同期を維持できます。 - アプリケーションの互換バージョンの設定
アプリケーションの互換バージョンは、アプリケーション・コンテナに属するアプリケーションPDBで使用可能なアプリケーションの最も古いバージョンです。 - アプリケーションのインストール、アップグレードおよびパッチ適用の操作中の一括挿入の実行
SQL*Loaderは、アプリケーションのインストール、アップグレードおよびパッチ適用の操作中に表に一括挿入することがサポートされる唯一のユーティリティです。従来型パス・ロードのみ、アプリケーションのインストール、アップグレードおよびパッチ適用の操作中に一括挿入することがサポートされます。 - アプリケーション・コンテナからのアプリケーションのアンインストール
アプリケーション・コンテナ内のアプリケーションをアンインストールできます。
関連トピック
44.3.1 アプリケーション・コンテナ内のアプリケーションの管理について
アプリケーション・コンテナでは、アプリケーションは名前付きのバージョン管理されたアプリケーション・メタデータおよび共通データのセットです。通常のアプリケーションは、アプリケーション共通ユーザーおよびアプリケーション共通オブジェクトをインストールします。
アプリケーション・コンテナ内では、アプリケーションはアプリケーション・ルートに格納されている名前付きのバージョン管理されたアプリケーション共通オブジェクトのセットです。このコンテキストでは、"アプリケーション"は"アプリケーション・バックエンド"を意味します。アプリケーション共通オブジェクトには、ユーザー・アカウント、表、パッケージなどが含まれます。アプリケーションは、アプリケーション・ルートに属するアプリケーションPDBと共有できます。
アプリケーション・ルート内でアプリケーションをインストール、アップグレードおよびパッチ適用できます。アプリケーションをインストール、アップグレードまたはパッチ適用する場合は、ALTER PLUGGABLE DATABASE ... BEGIN
文を発行して操作を開始し、ALTER PLUGGABLE DATABASE ... END
文を発行して操作を終了する必要があります。これらの文は、同じユーザー・セッションまたは別のユーザー・セッションで発行できます。
アプリケーション変更がこの方法で実行された場合、アプリケーションPDBは変更を適用するためにアプリケーション・ルートのアプリケーションと同期できます。アプリケーション・コンテナは、アプリケーションのバージョンとアプリケーションのパッチも管理します。
-
アプリケーションをインストールする場合は、アプリケーション・バージョン番号を指定する必要があります。
-
アプリケーションをアップグレードする場合は、古いアプリケーション・バージョン番号と新しいアプリケーション・バージョン番号を指定する必要があります。
-
アプリケーションにパッチを適用する場合は、パッチの最小アプリケーション・バージョン番号とパッチ番号を指定する必要があります。
アプリケーションが進化するときに、アプリケーション・コンテナでは適用するすべてのバージョンとパッチ変更が保持されます。異なるアプリケーションPDBが異なるバージョンのアプリケーションを使用するように、アプリケーション・コンテナを構成することもできます。たとえば、様々な顧客にアプリケーションを提供し、各顧客が独自のアプリケーションPDBを持つ場合、一部の顧客がアプリケーションのアップグレードを待つ時間が長くなることがあります。この場合、一部のアプリケーションPDBは最新バージョンのアプリケーションを使用できますが、他のアプリケーションPDBは古いバージョンのアプリケーションを使用できます。
次に、アプリケーション・コンテナ内のアプリケーションを作成およびメンテナンスするための標準的なプロセスを示します。
-
アプリケーション・コンテナを作成します。
-
アプリケーション・ルートにアプリケーションをインストールします。
このステップには、アプリケーション・データ・モデルの作成と、アプリケーション共通ユーザーおよびアプリケーション共通オブジェクトの構成が含まれます。
-
アプリケーション・ルートにアプリケーションPDBを作成します。
-
アプリケーションをインストールする必要のある各アプリケーションPDBをアプリケーション・ルート内のアプリケーションと同期します。
-
各アプリケーションPDBのデータをロードします。
-
アプリケーション・ルートでアプリケーションをアップグレードおよびパッチ適用することで、アプリケーションをメンテナンスします。
-
アップグレードとパッチから変更を適用する必要のあるアプリケーションPDBを同期します。
-
必要な場合に新規アプリケーションPDBを追加します。
注意:
SQL*Loaderは、アプリケーションのインストール、アップグレードおよびパッチ適用の操作中に表に一括挿入することがサポートされる唯一のユーティリティです。
- アプリケーション・モジュール名
アプリケーション・モジュール名は、DBMS_APPLICATION_INFO.SET_MODULE
プロシージャによって設定されるか、それに相当するOCI属性の設定に従って設定されます。
関連項目:
-
アプリケーション・コンテナのインストール、アップグレードおよびパッチ適用の操作の監査の詳細は、Oracle Databaseセキュリティ・ガイドのアプリケーション・コンテナの作成に関する項を参照してください
-
アプリケーション・モジュール名の設定の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
44.3.1.1 アプリケーション・モジュール名
アプリケーション・モジュール名は、DBMS_APPLICATION_INFO.SET_MODULE
プロシージャによって設定されるか、それに相当するOCI属性の設定に従って設定されます。
アプリケーション・メンテナンスの際には、データベースで他のアクティビティが発生している可能性があるため、モジュール名が必要です。たとえば、バックグラウンドプロセスによって発行された文はアプリケーション取得表で取得できません。また、他のユーザーがアプリケーションに関係ない文を実行している可能性もあります。モジュール名のチェックによって、取得される文を取得されない文から区別できます。APPLICATION BEGIN
が発行されたセッションとモジュール名が一致するセッションのみが取得対象とみなされます。
一部の句(SHARING
句など)は、ALTER PLUGGABLE DATABASE ... BEGIN
文とALTER PLUGGABLE DATABASE ... END
文の間で発行された場合にのみ有効です。これらの句に関してセッションのモジュール名が一致しない場合、そのセッションはBEGIN
文とEND
文の間に含められないため、その句を含む文はORA-65021
などのエラーで失敗します。
モジュール名が一致しない最も一般的な原因は、デフォルトのモジュール名です。たとえば、SQL*Plusではデータベースへの接続時にデフォルトのモジュール名が設定されます。SYSDBA
ユーザーとして接続したときに1つのデフォルト・モジュール名(たとえば、sqlplus@host1 (TNS V1-V3)
)が生成されますが、非SYSDBA
ユーザーとして接続したときは別のデフォルト・モジュール名(たとえば、SQL*Plus
)が生成されます。SYSDBA
ユーザーと非SYSDBA
ユーザーの両方がメンテナンスを実行する場合は、SQL*Plusのデフォルト設定を利用せずに、各セッションで明示的にモジュール名を同じ値に設定する必要があります。
例44-1 アプリケーション・モジュール名のチェック
この例は、接続したユーザーにSYSDBA
権限があるかどうかによってモジュール名が変わることを示しています。
SQL> CONNECT / AS SYSDBA
Connected.
SQL> select module from v$session where audsid = SYS_CONTEXT('USERENV','sessionid');
MODULE
----------------------------------------------------------------
sqlplus@host1 (TNS V1-V3)
SQL> CONNECT dba1
Password: *************
Connected.
SQL> select module from v$session where audsid = SYS_CONTEXT('USERENV','sessionid');
MODULE
----------------------------------------------------------------
SQL*Plus
関連項目:
アプリケーション・モジュール名の設定方法の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
44.3.2 アプリケーション・コンテナヘのアプリケーションのインストール
アプリケーション・コンテナにアプリケーションにインストールできます。
- アプリケーション・コンテナへのアプリケーションのインストールについて
アプリケーション・ルートにアプリケーションをインストールするには、ALTER PLUGGABLE DATABASE APPLICATION
文を発行します。 - 自動伝播によるアプリケーション・コンテナ内のアプリケーションのインストール
アプリケーション・コンテナにアプリケーションをインストールするには、ALTER PLUGGABLE DATABASE APPLICATION BEGIN INSTALL
文を実行してインストールを開始し、ALTER PLUGGABLE DATABASE APPLICATION END INSTALL
文を実行してインストールを終了します。アプリケーションは、アプリケーション・ルートのアプリケーションと同期されるアプリケーションPDBにインストールされます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
44.3.2.1 アプリケーション・コンテナ内のアプリケーションのインストールについて
アプリケーション・ルートにアプリケーションをインストールするには、ALTER PLUGGABLE DATABASE APPLICATION
文を発行します。
アプリケーション・ルートにのみアプリケーションをインストールし、アプリケーションと同期するアプリケーションPDBではアプリケーションが自動的にインストールされます。自動方法では、インストールはスクリプト、SQL文およびグラフィカル・ユーザー・インタフェース・ツールの1つ以上を使用して実行できます。
ALTER PLUGGABLE DATABASE APPLICATION BEGIN INSTALL
文でインストールの開始を示し、ALTER PLUGGABLE DATABASE APPLICATION END INSTALL
文でインストールの終了を示す必要があります。各インストールには、ALTER PLUGGABLE DATABASE APPLICATION
文で指定されるアプリケーション名とバージョン番号を関連付ける必要があります。
関連トピック
44.3.2.2 自動伝播によるアプリケーション・コンテナ内のアプリケーションのインストール
アプリケーション・コンテナにアプリケーションをインストールするには、ALTER PLUGGABLE DATABASE APPLICATION BEGIN INSTALL
文を実行してインストールを開始し、ALTER PLUGGABLE DATABASE APPLICATION END INSTALL
文を実行してインストールを終了します。アプリケーションは、アプリケーション・ルートのアプリケーションと同期されるアプリケーションPDBにインストールされます。
-
現在のユーザーには
ALTER PLUGGABLE DATABASE
システム権限が必要で、権限は一般にアプリケーション・ルートで付与されている必要があります。 -
アプリケーション・ルートは読取り/書込みオープン・モードである必要があります。
44.3.3 アプリケーション・コンテナ内のアプリケーションのアップグレード
アプリケーションに対する大きな変更によってアプリケーション・アップグレードが構成されます。アプリケーション・コンテナのアプリケーションをアップグレードできます。
- アプリケーション・コンテナ内のアプリケーションのアップグレードについて
アプリケーション・ルート内のアプリケーションをアップグレードするには、ALTER PLUGGABLE DATABASE APPLICATION
文を発行します。 - アプリケーション・コンテナ内のアプリケーションのアップグレード
アプリケーション・コンテナ内のアプリケーションをアップグレードするには、ALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE
文を実行してアップグレードを開始し、ALTER PLUGGABLE DATABASE APPLICATION END UPGRADE
文を実行してアップグレードを終了します。アップグレードに関連するアプリケーションの変更は、アプリケーション・ルートのアプリケーションと同期されるアプリケーションPDBに伝播されます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
44.3.3.1 アプリケーション・コンテナ内のアプリケーションのアップグレードについて
アプリケーション・ルート内のアプリケーションをアップグレードするには、ALTER PLUGGABLE DATABASE APPLICATION
文を発行します。
アプリケーション・ルートのみでアプリケーションをアップグレードすると、アプリケーションと同期したときにアプリケーションPDBによってアップグレードの変更が適用されます。アプリケーションPDBは、SYNC
句を指定したALTER PLUGGABLE DATABASE
文を実行することでアプリケーションと同期します。アップグレードは、スクリプト、SQL文およびグラフィカル・ユーザー・インタフェース・ツールの1つ以上を使用して実行できます。
ALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE
文でアップグレードの開始を示し、ALTER PLUGGABLE DATABASE APPLICATION END UPGRADE
文でアップグレードの終了を示す必要があります。各アップグレードには、ALTER PLUGGABLE DATABASE APPLICATION
文で指定される、アプリケーション名、開始バージョン番号および終了バージョン番号を関連付ける必要があります。
アプリケーションがアップグレードされると、Oracle Databaseによってアプリケーション・ルートのクローンが自動的に作成されます。アップグレード操作中、アプリケーションPDBはクローンを指しています。アップグレード操作中、アプリケーションは実行を継続します。アプリケーションPDBは、メタデータリンクおよび拡張データリンクの表およびビューに対してDML操作を実行でき、アプリケーションPDBはメタデータリンク・オブジェクト、拡張データリンク・オブジェクトおよびデータリンク・オブジェクトを問い合せることができます。アップグレード操作の完了後に、アプリケーション・ルート・クローンは残り、クローン内のアプリケーションのバージョンを使用するアプリケーションPDBを引き続きサポートします。アップグレードしたアプリケーションPDBは、アップグレードされたアプリケーション・ルートを指しています。アップグレードしないアプリケーションPDBはクローンの使用を継続でき、アプリケーション・ルートに接続されているアプリケーションPDBもクローンと同じアプリケーション・バージョンを使用できます。
図44-1にアップグレード・プロセスを示します。
注意:
アプリケーション・ルートがオープン・モードである場合、アプリケーション・ルート・クローンは読取り専用モードになります。アプリケーション・ルートがクローズされている場合、アプリケーション・ルート・クローンもクローズされます。
関連トピック
44.3.3.2 アプリケーション・コンテナ内のアプリケーションのアップグレード
アプリケーション・コンテナ内のアプリケーションをアップグレードするには、ALTER PLUGGABLE DATABASE APPLICATION BEGIN UPGRADE
文を実行してアップグレードを開始し、ALTER PLUGGABLE DATABASE APPLICATION END UPGRADE
文を実行してアップグレードを終了します。アップグレードに関連するアプリケーションの変更は、アプリケーション・ルートのアプリケーションと同期されるアプリケーションPDBに伝播されます。
-
CDBはローカルUNDOモードである必要があります。
-
現在のユーザーには
ALTER PLUGGABLE DATABASE
システム権限が必要で、権限は一般にアプリケーション・ルートで付与されている必要があります。 -
アプリケーション・ルートは読取り/書込みオープン・モードである必要があります。
44.3.4 アプリケーション・コンテナ内のアプリケーションへのパッチ適用
アプリケーションに対する小さな変更によってアプリケーション・パッチが構成されます。小さな変更の例として、バグ修正やセキュリティ・パッチがあります。アプリケーション・コンテナのアプリケーションにパッチ適用できます。
- アプリケーション・コンテナ内のアプリケーションへのパッチ適用について
アプリケーション・ルート内のアプリケーションにパッチ適用するには、ALTER PLUGGABLE DATABASE APPLICATION
文を発行します。 - 自動伝播によるアプリケーション・コンテナ内のアプリケーションへのパッチ適用
アプリケーション・コンテナ内のアプリケーションにパッチ適用するには、ALTER PLUGGABLE DATABASE APPLICATION BEGIN PATCH
文を実行してパッチ適用操作を開始し、ALTER PLUGGABLE DATABASE APPLICATION END UPGRADE
文を実行してパッチ適用操作を終了します。パッチ適用に関連するアプリケーションの変更は、アプリケーション・ルート内のアプリケーションと同期されるアプリケーションPDBに伝播されます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
44.3.4.1 アプリケーション・コンテナ内のアプリケーションへのパッチ適用について
アプリケーション・ルート内のアプリケーションにパッチ適用するには、ALTER PLUGGABLE DATABASE APPLICATION
文を発行します。
アプリケーション・ルートのアプリケーションにのみパッチを適用すると、アプリケーションと同期するアプリケーションPDBで変更が適用されます。パッチ適用は、スクリプト、SQL文およびグラフィカル・ユーザー・インタフェース・ツールの1つ以上を使用して実行できます。
ALTER PLUGGABLE DATABASE APPLICATION BEGIN PATCH
文でパッチ適用操作の開始を示し、ALTER PLUGGABLE DATABASE APPLICATION END PATCH
文でパッチ適用操作の終了を示す必要があります。各パッチには、ALTER PLUGGABLE DATABASE APPLICATION
文で指定される、アプリケーション名、開始バージョン番号および終了バージョン番号を関連付ける必要があります。
注意:
パッチ適用プロセスは、小さな操作セットに制限されます。一般に、表の削除などの破壊的な操作はパッチでは許可されていません。アプリケーションにパッチを適用しようとし、操作で「アプリケーション・パッチでサポートされていない操作」エラーが発生した場合、必要な変更を行うにはパッチ適用ではなくアプリケーションをアップグレードします。44.3.4.2 自動伝播によるアプリケーション・コンテナ内のアプリケーションへのパッチ適用
アプリケーション・コンテナ内のアプリケーションにパッチ適用するには、ALTER PLUGGABLE DATABASE APPLICATION BEGIN PATCH
文を実行してパッチ適用操作を開始し、ALTER PLUGGABLE DATABASE APPLICATION END UPGRADE
文を実行してパッチ適用操作を終了します。パッチ適用に関連するアプリケーションの変更は、アプリケーション・ルート内のアプリケーションと同期されるアプリケーションPDBに伝播されます。
-
現在のユーザーには
ALTER PLUGGABLE DATABASE
システム権限が必要で、権限は一般にアプリケーション・ルートで付与されている必要があります。 -
アプリケーション・ルートは読取り/書込みオープン・モードである必要があります。
44.3.5 アプリケーション・コンテナへの既存アプリケーションの移行
PDBにインストールされているアプリケーションをアプリケーション・コンテナに移行できます。アプリケーションは、アプリケーション・ルートまたはアプリケーションPDBに移行できます。たとえば、Oracle Database 12cリリース1 (12.1) CDBに接続中のPDBにインストールされているアプリケーションを、Oracle Database 12cリリース2 (12.2) CDBのアプリケーション・コンテナに移行できます。
- アプリケーション・コンテナへの既存のアプリケーションの移行について
既存のPDBを使用してアプリケーション・ルートを作成して、アプリケーションをアプリケーション・ルートに移行できます。 - 既存のPDBを使用したアプリケーション・ルートの作成
PDBをアプリケーション・コンテナにコピーすることで、PDBにインストールされているアプリケーションを移行できます。 - 既存のPDBを使用したアプリケーションPDBの作成
既存のアプリケーションをアプリケーション・ルートに移行した後で、アプリケーションを使用する既存のPDBを使用して、アプリケーションPDBを作成できます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
44.3.5.1 アプリケーション・コンテナへの既存アプリケーションの移行について
既存のPDBを使用してアプリケーション・ルートを作成して、アプリケーションをアプリケーション・ルートに移行できます。
アプリケーションが複数のPDBにインストールされる場合、PDBのいずれかを使用して、アプリケーション・ルートを作成できます。PDBのクローニングまたはアプリケーション・ルートとしてのPDBの接続など、PDBをアプリケーション・ルートにコピーするために使用できる方法のいずれかを使用できます。
共通ユーザー、ロールまたはプロファイルがアプリケーション・ルートを作成するために使用されるPDBに存在する場合、DBMS_PDB
パッケージのプロシージャを実行して、アプリケーションに関連付ける必要があります。PDBから作成されるアプリケーション・ルートを最初に開くと、各ローカル・ユーザー、ロールおよびプロファイルが共通とマークされます。DBMS_PDB
パッケージのプロシージャは、ユーザー、ロールまたはプロファイルをアプリケーションと関連付けます。そのため、ユーザー、ロールまたはプロファイルのすべてのDDL操作は、このアプリケーションのアプリケーションBEGIN...END
ブロック内で後で実行する必要があります。
共有データベース・オブジェクトがアプリケーション・ルートに存在する場合、DBMS_PDB
パッケージのプロシージャを実行して、データベース・オブジェクトをアプリケーション共通オブジェクトとしてアプリケーションに関連付ける必要があります。そのため、アプリケーション共通オブジェクトのすべてのDDL操作は、このアプリケーションのアプリケーションBEGIN...END
ブロック内で後で実行する必要があります。
アプリケーション・ルートを配置した後、既存のPDBを使用して、新しいアプリケーション・コンテナにアプリケーションPDBを作成できます。作成されるアプリケーションPDBは、データを含むアプリケーションのデータベース・オブジェクトを含む必要があります。アプリケーション・バージョンとパッチ番号を同期し、アプリケーションPDBの共有データベース・オブジェクトを確立する追加ステップが必要です。
同じアプリケーションを実行する100個のPDBのシナリオ
現在同じアプリケーションを実行している100個のPDBがあり、これらのPDBをアプリケーション・コンテナに移行するとします。これらのPDBには、アプリケーションが必要とするアプリケーション共通オブジェクトおよび共通ユーザー、ロールおよびプロファイルが含まれます。PDBをアプリケーション・コンテナに移行するには、次のステップに従います。
-
PDBのいずれかを選択し、「既存のPDBを使用したアプリケーション・ルートの作成」の手順を使用して、このPDBとともにアプリケーション・ルートを作成します。
このステップの一部として、
DBMS_PDB
パッケージのプロシージャを実行して、データベース・オブジェクト、ユーザー、ロールおよびプロファイルをアプリケーションに関連付けます。 -
「既存のPDBを使用したアプリケーションPDBの作成」の手順を使用して、アプリケーションを実行しているPDBを使用して100個のアプリケーションPDBを作成します。
関連トピック
親トピック: アプリケーション・コンテナへの既存アプリケーションの移行
44.3.5.2 既存のPDBを使用したアプリケーション・ルートの作成
アプリケーション・コンテナにPDBをコピーすることで、PDBにインストールされているアプリケーションを移行できます。
44.3.5.3 既存のPDBを使用したアプリケーションPDBの作成
既存のアプリケーションをアプリケーション・ルートに移行した後で、アプリケーションを使用する既存のPDBを使用して、アプリケーションPDBを作成できます。
関連トピック
親トピック: アプリケーション・コンテナへの既存アプリケーションの移行
44.3.6 アプリケーションPDB内のアプリケーションの同期
アプリケーション・ルートのアプリケーションがインストール、アップグレード、パッチ適用またはアンインストールされる場合、アプリケーション・ルートに属するアプリケーションPDBは同期されるまで変更されません。アプリケーションの同期により、アプリケーションPDB内のアプリケーションがアプリケーション・ルートの最新バージョンおよびパッチに更新されます。
ユーザー作成アプリケーション以外に、アプリケーション・コンテナには暗黙的に作成されるアプリケーションも含まれます。アプリケーションは、アプリケーション共通ユーザー操作がALTER PLUGGABLE DATABASE BEGIN/END
文の外部のCONTAINER=ALL
句で発行されたときにアプリケーション・ルートに暗黙的に作成されます。アプリケーション共通ユーザー操作には、CREATE USER
文による共通ユーザーの作成や、ALTER USER
文による共通ユーザーの変更などの操作が含まれます。他にもいくつかアプリケーション共通ユーザー操作があります。暗黙的なアプリケーションの名前はAPP$guid
で、guidはアプリケーション・ルートのGUIDです。暗黙的アプリケーションは、アプリケーション・ルートが初めて開かれたときに作成されます。
アプリケーションPDBが現在のコンテナであるときに次のSQL文を発行することで、アプリケーションPDBの1つのアプリケーションを同期します。
ALTER PLUGGABLE DATABASE APPLICATION application_name SYNC;
application_nameのアプリケーションの名前を入力します。
アプリケーションPDBが現在のコンテナであるときに次のSQL文を発行することで、暗黙的に作成されたアプリケーションを含め、アプリケーションPDB内のすべてのアプリケーションを同期します。
ALTER PLUGGABLE DATABASE APPLICATION ALL SYNC;
アプリケーションPDBが現在のコンテナであるときに次のSQL文を発行することで、アプリケーションPDB内の暗黙的に作成されたアプリケーションを同期します。
-
ALTER PLUGGABLE DATABASE APPLICATION APP$guid SYNC;
guidはアプリケーション・ルートのGUIDです。
-
ALTER PLUGGABLE DATABASE APPLICATION APP$CON SYNC;
APP$CON
は論理アプリケーション名であり、Oracle Databaseが暗黙的なアプリケーションの実際の名前に自動的に変換します。
例44-2 アプリケーションPDBでの特定のアプリケーションの同期
この例では、salesapp
というアプリケーションをアプリケーション・ルートの最新のアプリケーション変更と同期します。
ALTER PLUGGABLE DATABASE APPLICATION salesapp SYNC;
例44-3 アプリケーションPDB内のすべてのアプリケーションの同期
この例では、アプリケーションPDB内のすべてのアプリケーションをアプリケーション・ルートの最新のアプリケーション変更と同期します。
ALTER PLUGGABLE DATABASE APPLICATION ALL SYNC;
例44-4 アプリケーションPDB内の暗黙的に作成されたアプリケーションの同期
この例では、アプリケーションPDB内の暗黙的に作成されたすべてのアプリケーションを、アプリケーション・ルート内の暗黙的に作成されたアプリケーションに対する最新のアプリケーション変更と同期します。
ALTER PLUGGABLE DATABASE APPLICATION APP$CON SYNC;
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
44.3.7 アプリケーション・ルート・レプリカのプロキシPDBとの同期
異なるCDB内のアプリケーション・コンテナが同じアプリケーションを持つ場合、それらのアプリケーション・ルートは、マスター・アプリケーション・ルート、レプリカ・アプリケーション・ルートおよびプロキシPDBを作成することで同期を維持できます。
- アプリケーション・ルート・レプリカとプロキシPDBの同期について
プロキシPDBは、アプリケーション・ルートに基づいてアプリケーション・ルートとレプリカを同期できます。複数のアプリケーション・コンテナに同じアプリケーションがある場合は、この手法を使用して、すべてのアプリケーション・コンテナ内のアプリケーションの同期を維持できます。アプリケーション・ルートとアプリケーション・ルート・レプリカは、異なるCDB内に存在することができます。 - アプリケーション・ルート・レプリカを参照するプロキシPDBの作成
複数のアプリケーション・コンテナが同じアプリケーションを実行する必要がある場合、アプリケーション・コンテナ内のアプリケーションはプロキシPDBを使用して保持できます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
44.3.7.1 アプリケーション・ルート・レプリカのプロキシPDBとの同期について
プロキシPDBは、アプリケーション・ルートに基づいてアプリケーション・ルートとレプリカを同期できます。複数のアプリケーション・コンテナに同じアプリケーションがある場合は、この手法を使用して、すべてのアプリケーション・コンテナ内のアプリケーションの同期を維持できます。アプリケーション・ルートとアプリケーション・ルート・レプリカは、異なるCDB内に存在することができます。
特定のアプリケーションを複数のアプリケーション・コンテナにインストールできます。プロキシPDBを使用して、アプリケーションをより効率的にインストール、アップグレードおよびパッチ適用できます。
この構成では、1つのアプリケーション・コンテナにマスター・アプリケーション・ルートがあります。マスター・アプリケーション・ルートは、アプリケーションがインストール、アップグレードおよびパッチ適用される場所です。1つ以上のアプリケーション・ルート・レプリカは、マスター・アプリケーション・ルートのコピーです。各アプリケーション・ルート・レプリカは、マスター・アプリケーション・ルート内のプロキシPDBによって参照されます。
プロキシPDBは、マスター・アプリケーション・ルート内のアプリケーション変更と同期されるたびに、それらの変更を参照先のアプリケーション・ルート・レプリカに伝播します。アプリケーション・ルート・レプリカがマスター・アプリケーション・ルートからの変更と同期された後、アプリケーション・ルート・レプリカに接続されているアプリケーションPDBはそれと同期して変更を取得することもできます。
図44-2に、プロキシPDBを使用してアプリケーション・ルート・レプリカを同期する構成を示します。
また、アプリケーション・ルート・レプリカが構成され、固有のアプリケーションPDBを持つ場合、マスター・アプリケーション・ルート内のCONTAINERS
句を含む問合せは、現在のアプリケーション・コンテナおよびアプリケーション・ルート・レプリカのあるアプリケーション・コンテナからのデータを返すことができます。問合せは、アプリケーション・ルート・レプリカおよびそれに接続しているオープンされたアプリケーションPDBからの結果を表示できます。
44.3.7.2 アプリケーション・ルート・レプリカを参照するプロキシPDBの作成
複数のアプリケーション・コンテナが同じアプリケーションを実行する必要がある場合、アプリケーション・コンテナのアプリケーションはプロキシPDBを使用して保持できます。
例44-5 アプリケーション・ルート・レプリカとプロキシPDBの同期
この例では、2つのCDBが存在していることを前提としています。1つのCDBはhqdb
という名前で、もう1つはdepdb
という名前です。目標は、各CDB内のアプリケーション・コンテナで同じアプリケーションの同期を維持することです。この目標を実現するために、この例では次のアプリケーション・コンテナを構成します。
-
hqdb
CDBには、msappcon
というマスター・アプリケーション・ルートがあるアプリケーション・コンテナが含まれます。-
sampleapp
というアプリケーションがmsappcon
マスター・アプリケーション・ルートにインストールされます。 -
msappcon
アプリケーション・ルートには、mspdb1
およびmspdb2
という2つのアプリケーションPDBが含まれます。 -
msappcon
アプリケーション・ルートには、他のCDB内のアプリケーション・ルート・レプリカを参照するprxy
という名前のプロキシPDBも含まれます。
-
-
depdb
CDBには、depappcon
というアプリケーション・ルート・レプリカがあるアプリケーション・コンテナが含まれます。-
sampleapp
というアプリケーションは、msappcon
マスター・アプリケーション・ルート内のプロキシPDBprxy
から伝播され、depappcon
マスター・アプリケーション・ルートにインストールされます。 -
depappcon
アプリケーション・ルートには、deppdb1
およびdeppdb2
という2つのアプリケーションPDBが含まれます。
-
この例では、msappcon
マスター・アプリケーション・ルート内のsampleapp
アプリケーションに対する変更が、アプリケーションPDBが同期されたときに両方のCDB内のアプリケーションPDBにどのように適用されるかを示します。
-
hqdb
CDBにマスター・アプリケーション・ルートを持つアプリケーション・コンテナを作成します。-
SQL*Plusで、現在のコンテナが
hqdb
CDBルートであることを確認します。 -
次の文でCDBシードからアプリケーション・コンテナを作成します。
CREATE PLUGGABLE DATABASE msappcon AS APPLICATION CONTAINER ADMIN USER msappconadm IDENTIFIED BY password STORAGE (MAXSIZE 2G) DEFAULT TABLESPACE appcontbs DATAFILE '/disk1/oracle/dbs/mssappcon/msappcon01.dbf' SIZE 250M AUTOEXTEND ON FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/msappcon/');
-
新規マスター・アプリケーション・ルートを読取り/書込みモードでオープンします。
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を作成します。
たとえば、CDBシードから2つのアプリケーションPDBを作成します。
CREATE PLUGGABLE DATABASE mspdb1 ADMIN USER mspdb1admin IDENTIFIED BY password STORAGE (MAXSIZE 2G) DEFAULT TABLESPACE mspdb1tbs DATAFILE '/disk1/oracle/dbs/mspdb1/mspdb101.dbf' SIZE 250M AUTOEXTEND ON FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/mspdb1/'); CREATE PLUGGABLE DATABASE mspdb2 ADMIN USER mspdb2admin IDENTIFIED BY password STORAGE (MAXSIZE 2G) DEFAULT TABLESPACE mspdb2tbs DATAFILE '/disk1/oracle/dbs/mspdb2/mspdb201.dbf' SIZE 250M AUTOEXTEND ON FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/mspdb2/');
-
両方のアプリケーション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ルートであることを確認します。 -
次の文でCDBシードからアプリケーション・コンテナを作成します。
CREATE PLUGGABLE DATABASE depappcon AS APPLICATION CONTAINER ADMIN USER depappconadm IDENTIFIED BY password STORAGE (MAXSIZE 2G) DEFAULT TABLESPACE appcontbs DATAFILE '/disk2/oracle/dbs/depsappcon/depappcon01.dbf' SIZE 250M AUTOEXTEND ON FILE_NAME_CONVERT = ('/disk2/oracle/dbs/pdbseed/', '/disk2/oracle/dbs/depappcon/');
注意:
-
アプリケーション・ルート・レプリカで使用されるリスナーのポートが1521でない場合は、
PORT
句が必要です。 -
アプリケーション・ルート・レプリカのホストがマスター・アプリケーション・ルートのホストと異なる場合は、
HOST
句が必要です。
-
-
新規アプリケーション・ルート・レプリカを読取り/書込みモードでオープンします。
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 prxy AS PROXY FROM depappcon@depappcon FILE_NAME_CONVERT = ('/disk2/oracle/dbs/depsappcon/', '/disk1/oracle/dbs/prxy/');
-
プロキシPDBをオープンします。
ALTER PLUGGABLE DATABASE prxy OPEN;
-
プロキシPDBをマスター・アプリケーション・ルートと同期します。
ALTER SESSION SET CONTAINER=prxy; ALTER PLUGGABLE DATABASE APPLICATION sampleapp SYNC;
-
-
1つ以上のアプリケーションPDBをアプリケーション・ルート・レプリカに作成し、同期します。
-
コンテナをアプリケーション・ルート・レプリカに変更します。
ALTER SESSION SET CONTAINER=depappcon;
-
アプリケーション・ルート・レプリカにアプリケーションPDBを作成します。
たとえば、CDBシードから2つのアプリケーションPDBを作成します。
CREATE PLUGGABLE DATABASE deppdb1 ADMIN USER deppdb1admin IDENTIFIED BY password STORAGE (MAXSIZE 2G) DEFAULT TABLESPACE deppdb1tbs DATAFILE '/disk2/oracle/dbs/deppdb1/deppdb101.dbf' SIZE 250M AUTOEXTEND ON FILE_NAME_CONVERT = ('/disk2/oracle/dbs/pdbseed/', '/disk2/oracle/dbs/deppdb1/'); CREATE PLUGGABLE DATABASE deppdb2 ADMIN USER deppdb2admin IDENTIFIED BY password STORAGE (MAXSIZE 2G) DEFAULT TABLESPACE deppdb2tbs DATAFILE '/disk2/oracle/dbs/deppdb2/deppdb201.dbf' SIZE 250M AUTOEXTEND ON FILE_NAME_CONVERT = ('/disk2/oracle/dbs/pdbseed/', '/disk2/oracle/dbs/deppdb2/');
-
両方のアプリケーション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=prxy; 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
表に追加されたため、アプリケーション・アップグレード内の変更が出力に反映されます。
-
44.3.8 アプリケーションの互換バージョンの設定
アプリケーションの互換バージョンは、アプリケーション・コンテナに属するアプリケーションPDBで使用可能なアプリケーションの最も古いバージョンです。
互換バージョンは、互換バージョンが設定されたとき、およびアプリケーションPDBが作成されたときに施行されます。アプリケーションのアップグレードによって生成されたアプリケーション・ルート・クローンがある場合、互換バージョンより前のバージョンに対応するすべてのアプリケーション・ルート・クローンは暗黙的に削除されます。
アプリケーションの互換バージョンを指定するには、アプリケーション・ルートが現在のコンテナであるときに、次のいずれかのSQL文を発行します。
-
ALTER PLUGGABLE DATABASE APPLICATION application_name SET COMPATIBILITY VERSION 'application_version_number';
application_nameはアプリケーションの名前であり、application_version_numberは最も古い互換バージョンです。
-
ALTER PLUGGABLE DATABASE APPLICATION application_name SET COMPATIBILITY VERSION CURRENT;
application_nameはアプリケーションの名前です。現在のバージョンは、アプリケーション・ルート内のアプリケーションのバージョンです。
- SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
ALTER PLUGGABLE DATABASE APPLICATION SET COMPATIBILITY VERSION
文を実行します。
例44-6 互換バージョンに特定のバージョン番号を設定する
この例は、salesapp
というアプリケーションの互換バージョンにバージョン4.2を設定しています。
ALTER PLUGGABLE DATABASE APPLICATION salesapp SET COMPATIBILITY VERSION '4.2';
例44-7 互換バージョンに現在のアプリケーション・バージョンを設定する
この例は、salesapp
というアプリケーションの互換バージョンに現在のアプリケーション・バージョンを設定しています。
ALTER PLUGGABLE DATABASE APPLICATION salesapp SET COMPATIBILITY VERSION CURRENT;
関連項目:
アプリケーション・ルート・クローンの詳細は、アプリケーション・コンテナ内のアプリケーションのアップグレードについてを参照してください親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
44.3.9 アプリケーションのインストール、アップグレードおよびパッチ適用の操作中の一括挿入の実行
SQL*Loaderは、アプリケーションのインストール、アップグレードおよびパッチ適用の操作中に表に一括挿入することがサポートされる唯一のユーティリティです。従来型パス・ロードのみ、アプリケーションのインストール、アップグレードおよびパッチ適用の操作中に一括挿入することがサポートされます。
ALTER PLUGGABLE DATABASE APPLICATION BEGIN
とALTER PLUGGABLE DATABASE APPLICATION END
文の間に正しいSQL*Loaderモジュール名を指定する必要があります。モジュール名はSQL Loader Conventional Path Load
です。
例44-8 アプリケーションのインストール中の従来型パス・ロードの実行
この例では、従来型パス・ロードがアプリケーション・ルートで実行されます。
-
SQL*Plusで、アプリケーション・ルートに切り替えます。
ALTER SESSION SET CONTAINER=cdb1_approot1;
-
正しいモジュールを設定します。
exec DBMS_APPLICATION_INFO.SET_MODULE('SQL Loader Conventional Path Load', '');
-
アプリケーションのインストールを開始します。
ALTER PLUGGABLE DATABASE APPLICATION APP1 BEGIN INSTALL '1';
-
SQL*Loaderを使用して、従来型パス・ロードを実行します。
host sqlldr u1/u1@cdb1_approot1 control=my_bulk_load.ctl rows=3 log=my_bulk_load.log
-
アプリケーションのインストールを終了します。
ALTER PLUGGABLE DATABASE APPLICATION APP1 END INSTALL '1';
関連項目:
SQL*Loaderの詳細は、『Oracle Databaseユーティリティ』を参照してください親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
44.3.10 アプリケーション・コンテナからのアプリケーションのアンインストール
アプリケーション・コンテナのアプリケーションをアンインストールできます。
- アプリケーション・コンテナからのアプリケーションのアンインストールについて
アプリケーション・ルートからアプリケーションをアンインストールするには、ALTER PLUGGABLE DATABASE APPLICATION
文を発行します。 - アプリケーション・コンテナからのアプリケーションのアンインストール
アプリケーション・コンテナからアプリケーションをアンインストールするには、ALTER PLUGGABLE DATABASE APPLICATION BEGIN UNINSTALL
文を実行してアンインストールを開始し、ALTER PLUGGABLE DATABASE APPLICATION END UNINSTALL
文を実行してアンインストールを終了します。アプリケーションは、アプリケーション・ルートのアプリケーションと同期されるアプリケーションPDBからアンインストールされます。
親トピック:・アプリケーション・コンテナ内のアプリケーションの管理
44.3.10.1 アプリケーション・コンテナからのアプリケーションのアンインストールについて
アプリケーション・ルートからアプリケーションをアンインストールするには、ALTER PLUGGABLE DATABASE APPLICATION
文を発行します。
アプリケーション・ルートからのみアプリケーションをアンインストールし、アプリケーションと同期するアプリケーションPDBではアプリケーションが自動的にアンインストールされます。アンインストール操作は、スクリプト、SQL文およびグラフィカル・ユーザー・インタフェース・ツールの1つ以上を使用して実行できます。
ALTER PLUGGABLE DATABASE APPLICATION BEGIN UNINSTALL
文でアンインストールの開始を示し、ALTER PLUGGABLE DATABASE APPLICATION END UNINSTALL
文でアンインストールの終了を示す必要があります。各アンインストールには、ALTER PLUGGABLE DATABASE APPLICATION
文で指定されるアプリケーション名とバージョン番号を関連付ける必要があります。
アプリケーションをアンインストールしても、データ・ディクショナリからアプリケーションは削除されません。アプリケーションのアップグレード、パッチ適用およびアンインストールが許可されないように、アプリケーションがUNINSTALLED
としてマークされます。
アプリケーションのアンインストール中は、アプリケーションへの破壊的な変更が許可されます。アプリケーションPDBで実行されているアプリケーションは、アンインストール中、およびアプリケーションがアプリケーション・ルートからアンインストールされた後も引き続き機能します。アプリケーションがアプリケーションPDBで引き続き機能できるのは、ALTER PLUGGABLE DATABASE APPLICATION BEGIN UNINSTALL
文によって、アプリケーション・ルート・クローンと呼ばれるアプリケーション・ルートのクローンが作成されるためです。アプリケーション・ルート・クローンは古いバージョンのアプリケーション・オブジェクトのメタデータ・リポジトリとして機能し、最新バージョンのアプリケーションと同期されていないアプリケーションPDBが引き続き機能できるようにします。クローンはアプリケーションPDBがオープンされているときに作成されるため、アプリケーションをアンインストールする前に、ローカルUNDOをCDBレベルで構成する必要があります。
注意:
アプリケーションのアップグレードでも、アプリケーション・ルート・クローンが作成されます。
関連項目:
-
アプリケーション・ルート・クローンの詳細は、アプリケーション・コンテナ内のアプリケーションのアップグレードについてを参照してください
44.3.10.2 アプリケーション・コンテナからのアプリケーションのアンインストール
アプリケーション・コンテナからアプリケーションをアンインストールするには、ALTER PLUGGABLE DATABASE APPLICATION BEGIN UNINSTALL
文を実行してアンインストールを開始し、ALTER PLUGGABLE DATABASE APPLICATION END UNINSTALL
文を実行してアンインストールを終了します。アプリケーションは、アプリケーション・ルートのアプリケーションと同期されるアプリケーションPDBからアンインストールされます。
-
CDBはローカルUNDOモードである必要があります。
-
現在のユーザーには
ALTER PLUGGABLE DATABASE
システム権限が必要で、権限は一般にアプリケーション・ルートで付与されている必要があります。 -
アプリケーション・ルートは読取り/書込みオープン・モードである必要があります。
44.4 アプリケーション共通オブジェクトの管理
アプリケーション共通オブジェクトは、アプリケーション・コンテナで共有されている、ユーザーにより作成されたデータベース・オブジェクトです。アプリケーション共通オブジェクトは、アプリケーション・ルートに作成されます。
- アプリケーション共通オブジェクトについて
アプリケーション共通オブジェクトは、アプリケーション・ルートに作成され、アプリケーション・ルートに属するアプリケーションPDBと共有されます。アプリケーション共通オブジェクトには、メタデータリンク、データリンクおよび拡張データリンクの3種類があります。 - アプリケーション共通オブジェクトの制限
いくつかの制限がアプリケーション共通オブジェクトに適用されます。 - アプリケーション共通オブジェクトの作成
DEFAULT_SHARING
初期化パラメータが適切な値に設定されていることを確認するか、SHARING
句をCREATE
SQL文に含めることで、アプリケーション共通オブジェクトをアプリケーション・ルートに作成します。 - アプリケーション共通オブジェクトに対するDML文の発行
メタデータリンク、データリンクおよび拡張データリンクのアプリケーション共通オブジェクトに対するDML文の発行のルールは異なります。 - DDL文でのアプリケーション共通オブジェクトの変更
特定のDDL文でアプリケーション・ルート内のアプリケーション共通オブジェクトを変更する場合は、ALTER PLUGGABLE DATABASE APPLICATION BEGIN
文とALTER PLUGGABLE DATABASE APPLICATION END
文の間でオブジェクトを変更する必要があり、変更を適用するためにアプリケーションPDBがアプリケーションと同期する必要があります。
44.4.1 アプリケーション共通オブジェクトについて
アプリケーション共通オブジェクトは、アプリケーション・ルートに作成され、アプリケーション・ルートに属するアプリケーションPDBと共有されています。アプリケーション共通オブジェクトには、メタデータリンク、データリンクおよび拡張データリンクの3種類があります。
次のタイプのデータベース・オブジェクトをアプリケーション共通オブジェクトにすることができます。
-
アナリティック・ビュー
-
属性ディメンション
-
ディレクトリ
-
外部プロシージャ・ライブラリ
-
階層
-
Javaクラス、Javaリソース、Javaソース
-
パッケージ
-
オブジェクト表
-
オブジェクト・タイプ
-
オブジェクト・ビュー
-
順序
-
ストアド・ファンクション
-
ストアド・プロシージャ
-
シノニム
-
表(一時表を含む)
-
トリガー
-
ビュー
これらのタイプのデータベース・オブジェクトは、現在のコンテナがアプリケーション・ルートのときにCREATE
文を発行し、それに対して共有属性を指定することで、アプリケーション共通オブジェクトとして作成できます。共有属性は、CREATE
文にSHARING
句を含めるか、アプリケーション・ルートでDEFAULT_SHARING
初期化パラメータを設定することで指定できます。DEFAULT_SHARING
初期化パラメータを設定する場合、設定は、アプリケーション・ルートに作成されたサポートされるタイプのすべてのデータベース・オブジェクトのデフォルト共有属性です。ただし、SHARING
句がCREATE
文に含まれる場合、その設定はDEFAULT_SHARING
初期化パラメータの設定をオーバーライドします。
共有属性に対して次のいずれかを指定できます。
-
METADATA
: メタデータ・リンクはデータベース・オブジェクトのメタデータを共有しますが、データは各コンテナに固有です。これらのデータベース・オブジェクトは、メタデータリンク・アプリケーション共通オブジェクトと呼ばれます。この設定がデフォルトです。 -
DATA
: データ・リンクはデータベース・オブジェクトを共有し、そのデータはアプリケーション・コンテナ内のすべてのコンテナに対して同じです。そのデータはアプリケーション・ルートにのみ格納されます。これらのデータベース・オブジェクトは、データリンク・アプリケーション共通オブジェクトと呼ばれます。 -
EXTENDED DATA
: 拡張データ・リンクはデータベース・オブジェクトを共有し、アプリケーション・ルートのそのデータはアプリケーション・コンテナ内のすべてのコンテナに対して同じです。ただし、アプリケーション・コンテナ内の各アプリケーションPDBは、そのアプリケーションPDBに固有のデータを格納できます。このタイプのデータベース・オブジェクトの場合、データはアプリケーション・ルートに格納され、必要に応じて各アプリケーションPDBに格納されます。これらのデータベース・オブジェクトは、拡張データリンク・アプリケーション共通オブジェクトと呼ばれます。 -
NONE
: データベース・オブジェクトは共有されません。
ほとんどのタイプのアプリケーション共通オブジェクトの場合、SHARING
句の有効な設定はMETADATA
およびNONE
のみです。次のタイプのアプリケーション共通オブジェクトでは、SHARING
句に追加の設定を行うことができます。
-
表(オブジェクト表を除く)の場合、
SHARING
句には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操作は、アプリケーションのインストール、アップグレードまたはパッチ適用内で行う必要があります。
関連トピック
親トピック: アプリケーション共通オブジェクトの管理
44.4.2 アプリケーション共通オブジェクトの制限
いくつかの制限がアプリケーション共通オブジェクトに適用されます。
アプリケーション共通オブジェクトに対する問合せでは、現在のコンテナではないコンテナからデータを返すことができます。たとえば、現在のコンテナがアプリケーション・ルートである場合、CONTAINERS
句が含まれている問合せでは、アプリケーションPDBからメタデータリンク・アプリケーション共通オブジェクトのデータを返すことができます。また、現在のコンテナがアプリケーションPDBである場合、データリンク・アプリケーション共通オブジェクトおよび拡張データリンク・アプリケーション共通オブジェクトに対する問合せでは、アプリケーション・ルートにあるデータが返されます。
次のタイプの列では、データが返される問合せで、現在のコンテナではないコンテナからデータが返されません。
-
次のユーザー定義型: オブジェクト型、VARRAY、REFおよびネストした表
-
次のOracle提供のタイプ:
ANYTYPE
、ANYDATASET
、URIタイプ、SDO_TOPO_GEOMETRY
、SDO_GEORASTER
およびExpression
また、オブジェクト表およびオブジェクト・ビューに対する問合せでは、現在のコンテナではないコンテナからはデータが返されません。
親トピック: アプリケーション共通オブジェクトの管理
44.4.3 アプリケーション共通オブジェクトの作成
DEFAULT_SHARING
初期化パラメータが適切な値に設定されていることを確認するか、SHARING
句をCREATE
SQL文に含めることで、アプリケーション共通オブジェクトをアプリケーション・ルートに作成します。
例44-9 DEFAULT_SHARING
初期化パラメータの設定
この例では、DEFAULT_SHARING
初期化パラメータをメモリーとSPFILEの両方でDATA
に設定します。共有をサポートするデータベース・オブジェクトがアプリケーション・ルートに作成されており、SHARING
句がCREATE
SQL文に含まれない場合、データベース・オブジェクトはDEFAULT_SHARING
初期化パラメータで指定された共有属性を使用します。
ALTER SYSTEM SET DEFAULT_SHARING=DATA SCOPE=BOTH;
例44-10 メタデータリンク・オブジェクトの作成
この例では、SHARING=METADATA
句を含めることでemployees_md
メタデータリンク表を作成します。application_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';
例44-11 データリンク・オブジェクトの作成
この例では、SHARING=DATA
句を含めることでproduct_descriptions_ob
データリンク表を作成します。application_nameはsalesapp
であり、application_version_numberは4.2で、オブジェクトはアプリケーションのインストール時に作成されます。
ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN INSTALL '4.2';
CREATE TABLE product_descriptions_ob SHARING=DATA
(product_id NUMBER(6),
language_id VARCHAR2(3),
translated_name NVARCHAR2(50) CONSTRAINT translated_name_nn NOT NULL,
translated_description NVARCHAR2(2000) CONSTRAINT translated_desc_nn NOT NULL);
ALTER PLUGGABLE DATABASE APPLICATION salesapp END INSTALL '4.2';
例44-12 拡張データリンク・オブジェクトの作成
この例では、EXTENDED
キーワードとSHARING
句を含めることでpostalcodes
拡張データリンク表を作成します。application_nameはsalesapp
であり、application_version_numberは4.2で、オブジェクトはアプリケーションのインストール時に作成されます。
ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN INSTALL '4.2';
CREATE TABLE postalcodes SHARING=EXTENDED DATA
(code VARCHAR2(7),
country_id NUMBER,
place_name VARCHAR2(20));
ALTER PLUGGABLE DATABASE APPLICATION salesapp END INSTALL '4.2';
例44-13 アプリケーション・ルートで共有されないオブジェクトの作成
この例では、departments_ns
表を作成し、SHARING=NONE
句を含めることで共有共通アプリケーション・オブジェクトではないことを指定します。作成後に、このデータベース・オブジェクトはアプリケーション・ルートでのみアクセスできます。
CREATE TABLE departments_ns SHARING=NONE
(department_id NUMBER(4),
department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL,
manager_id NUMBER(6),
location_id NUMBER(4),
dn VARCHAR2(300));
注意:
ALTER PLUGGABLE DATABASE APPLICATION BEGIN
およびEND
文は、共有共通オブジェクトではないオブジェクトの作成時には不要です。ただし、ALTER PLUGGABLE DATABASE APPLICATION BEGIN
文とEND
文の間で共有されないオブジェクトを作成する場合、オブジェクトはアプリケーションと同期するアプリケーションPDBに作成されます。
44.4.4 アプリケーション共通オブジェクトに対するDML文の発行
メタデータリンク、データリンクおよび拡張データリンクのアプリケーション共通オブジェクトに対するデDML文の発行のルールは異なります。
アプリケーション共通オブジェクトに対してDML文を発行する場合は、次のルールが適用されます。
-
メタデータリンク・アプリケーション共通オブジェクト: DML文は、メタデータリンク・アプリケーション・オブジェクトに対して通常どおり発行できます。メタデータリンク・アプリケーション共通オブジェクトの場合、構造はアプリケーション・コンテナのすべてのコンテナで同じですが、データは異なります。ユーザーとアプリケーションは、通常のデータベース・オブジェクトの場合と同じ方法でこれらのオブジェクトに対してDML文を発行でき、DML文は現在のコンテナにのみ影響します。
メタデータリンク・オブジェクトの場合、アプリケーション・ルートでDML文を実行するときは、
CONTAINERS
句が役に立ちます。この句では、アプリケーション・コンテナ内のすべてのアプリケーションPDBに対して、指定した表またはビューのデータを問い合せることができます。また、アプリケーション・コンテナ内のすべてのアプリケーションPDBで指定した表またはビューのデータに対してDMLの変更を実行できます。コンテナ句を使用するには、次の例のようにSQL文の句に表をラップします。SELECT * FROM CONTAINERS(sales.customers);
また、表またはビューを常に
CONTAINERS
句にラップする必要があることを指定するには、次の例のようにアプリケーション・ルート内でENABLE CONTAINERS_DEFAULT
句を指定したALTER TABLE
またはALTER VIEW
文を発行します。ALTER TABLE sales.customers ENABLE CONTAINERS_DEFAULT;
この属性を設定した後で、アプリケーション・ルートで発行される問合せまたはDML文はデータベース・オブジェクトに対してデフォルトで
CONTAINERS
句を使用します。DBA_TABLES
およびDBA_VIEWS
ビューのCONTAINERS_DEFAULT
列は、デフォルトでCONTAINERS
句に対してデータベース・オブジェクトが有効になるかどうかを示します。 -
データリンク・アプリケーション共通オブジェクト: DML文は、アプリケーション・ルート内のデータリンク・アプリケーション・オブジェクトに対して通常どおり発行できます。アプリケーション・ルート内のDMLの変更は、アプリケーション・コンテナ内のすべてのアプリケーションPDBで使用可能なデータに影響します。DML文は、アプリケーションPDB内のデータリンク・アプリケーション・オブジェクトに対して発行できません。
-
拡張データリンク・アプリケーション共通オブジェクト: DML文は、アプリケーション・ルートおよびアプリケーションPDB内の拡張データリンク・アプリケーション・オブジェクトに対して通常どおり発行できます。アプリケーション・ルート内のDMLの変更は、アプリケーション・コンテナ内のすべてのアプリケーションPDBで使用可能なデータに影響します。アプリケーションPDB内でのDMLによる変更は、そのアプリケーションPDBに固有のデータにのみ影響します。
データリンク・オブジェクトまたは拡張データリンク・オブジェクトを持つアプリケーション・ルートがあり、このアプリケーション・ルートがプロキシPDBを使用して同期される1つ以上のアプリケーション・ルート・レプリカのマスター・アプリケーション・ルートであるとします。この構成では、DML文がアプリケーションのインストール、アップグレードまたはパッチ適用中に発行された場合、DMLの変更はアプリケーション・ルート・レプリカにのみ同期されます。具体的には、DMLの変更はALTER PLUGGABLE DATABASE APPLICATION BEGIN
文とALTER PLUGGABLE DATABASE APPLICATION END
文の間にアプリケーション・ルートで発行する必要があります。アプリケーションのインストール、アップグレードまたはパッチ適用の外側で行われたDMLの変更は、現在のアプリケーション・ルートにのみ適用され、アプリケーション・ルート・レプリカには同期されません。
DML文をデータリンク・アプリケーション共通オブジェクトまたは拡張データリンク・アプリケーション共通オブジェクトに対して発行するには:
44.4.5 DDL文を使用したアプリケーション共通オブジェクトの変更
特定のDDL文でアプリケーション・ルート内のアプリケーション共通オブジェクトを変更する場合は、ALTER PLUGGABLE DATABASE APPLICATION BEGIN
文とALTER PLUGGABLE DATABASE APPLICATION END
文の間でオブジェクトを変更する必要があり、変更を適用するためにアプリケーションPDBがアプリケーションと同期する必要があります。
ALTER
、RENAME
またはDROP
SQL文をデータベース・オブジェクトに対して実行してDDL変更を実行します。
44.5 アプリケーション・コンテナ内のコンテナに対するDML文の発行
アプリケーション・ルートで発行されるDML文では、アプリケーション・コンテナ内の1つ以上のコンテナを変更できます。また、DML文に対して1つ以上のデフォルト・コンテナ・ターゲットを指定できます。
- アプリケーション・コンテナ内のコンテナに対するDML文の発行について
DML文は、アプリケーション・コンテナ内の複数のコンテナ内のデータベース・オブジェクトに影響することがあります。 - アプリケーション・コンテナ内のDML文のデフォルト・コンテナの指定
アプリケーション・コンテナ内のDML文のデフォルト・コンテナを指定するには、CONTAINERS DEFAULT TARGET
句を指定したALTER PLUGGABLE DATABASE
文を発行します。
44.5.1 アプリケーション・コンテナ内のコンテナに対する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
句には、次の制限事項が適用されます。
-
INSERT
のターゲットがCONTAINERS()
内にあるSELECT
文を使用したINSERT
文はサポートされません。 -
INSERT
のターゲットがCONTAINERS()
内にある、複数表に対するINSERT
文はサポートされません。 -
CONTAINERS
句を使用するDML文では、データベース・リスナーがTCP (IPCではなく)を使用して構成され、PORT
値およびHOST
値がPORT
句およびHOST
句を使用して各ターゲットPDBに指定されている必要があります。
関連トピック
44.5.2 アプリケーション・コンテナにおけるDML文のデフォルト・コンテナの指定
アプリケーション・コンテナ内のDML文のデフォルト・コンテナを指定するには、CONTAINERS DEFAULT TARGET
句を指定したALTER PLUGGABLE DATABASE
文を発行します。
WHERE
句でコンテナを指定せずにDML文がアプリケーション・ルートで発行されている場合、DML文はアプリケーション・コンテナのデフォルト・コンテナに影響します。デフォルトのコンテナは、アプリケーション・コンテナ内のコンテナ(アプリケーション・ルートまたはアプリケーションPDBを含む)にすることができます。1つのデフォルトのコンテナのみを使用できます。
例44-14 アプリケーション・コンテナ内のDML文のデフォルト・コンテナの指定
この例では、APDB1
がアプリケーション・コンテナ内のDML文のデフォルト・コンテナであることを指定します。
ALTER PLUGGABLE DATABASE CONTAINERS DEFAULT TARGET = (APDB1);
例44-15 デフォルト・コンテナのクリア
この例は、デフォルト・コンテナ設定をクリアしています。設定されていない場合、デフォルト・コンテナはアプリケーション・ルートです。
ALTER PLUGGABLE DATABASE CONTAINERS DEFAULT TARGET = NONE;
44.6 コンテナ・マップを使用したPDBでのパーティション化
コンテナ・マップにより、データが表レベルで物理的にパーティション化されていない場合にデータをアプリケーションPDBレベルでパーティション化できます。
- コンテナ・マップを使用したPDBによるパーティション化について
コンテナ・マップは、アプリケーション・ルートで定義されているパーティション化されたマップ表を指定するデータベース・プロパティです。コンテナ・マップを使用して、アプリケーション・コンテナ内のメタデータリンク・オブジェクトのデータをパーティション化できます。コンテナ・マップは、よく使用される列に基づいてアプリケーションPDB内のデータをパーティション化します。 - コンテナ・マップの作成
マップ・オブジェクトを作成し、CONTAINER_MAP
データベース・プロパティをマップ・オブジェクトに設定することで、コンテナ・マップを作成します。
44.6.1 コンテナ・マップを使用したPDBによるパーティション化について
コンテナ・マップは、アプリケーション・ルートで定義されているパーティション化されたマップ表を指定するデータベース・プロパティです。コンテナ・マップを使用して、アプリケーション・コンテナ内のメタデータリンク・オブジェクトのデータをパーティション化できます。コンテナ・マップは、よく使用される列に基づいてアプリケーションPDB内のデータをパーティション化します。
コンテナ・マップは、共通オブジェクトの列に論理パーティション・キーを定義できます。このマッピングによって、コンテナがコンテナ・マップに基づいて内部的に解決されるため、CON_ID
述語を使用して問合せを定義するという要件、およびCONTAINERS
句を使用する必要性がなくなります。単一のPDBに複数のテナントがあるテナントIDを使用した行ベースの統合から、各テナントに別々のPDBを使用する構成に移行する場合に、コンテナ・マップが役に立つことがよくあります。
アプリケーション・コンテナでコンテナ・マップを使用するには、アプリケーション・ルートでALTER DATABASE
文を使用して、CONTAINER_MAP
データベース・プロパティのパーティション化された表を指定します。パーティション化された表はマップ・オブジェクトと呼ばれます。マップ・オブジェクトは、よく使用される列に基づいてメタデータリンク表内のデータに対して次のいずれかのパーティション化戦略を指定します。
-
レンジ・パーティション化
-
リスト・パーティション化
-
ハッシュ・パーティション化
マップ・オブジェクト内のパーティションの名前は、アプリケーション・コンテナ内のアプリケーションPDBの名前と一致します。マップ・オブジェクトのパーティション化に使用される列は、メタデータリンク・オブジェクトの列と一致する必要があります。メタデータリンク・オブジェクトは表レベルで物理的にパーティション化されませんが、コンテナ・マップによって有効化されるパーティション化戦略を使用して問い合せることができます。
次の図は、アプリケーション・ルート内のマップ・オブジェクト、メタデータリンク表およびメタデータリンク表に対する問合せを示しています。問合せは適切なアプリケーションPDBで実行されます。
図には、アプリケーション・コンテナにAMER
、EURO
およびASIA
という3つのアプリケーションPDBがあることが示されています。アプリケーションPDBは異なる地域(それぞれアメリカ、ヨーロッパおよびアジア)のデータを格納します。oe.cmtb
というメタデータリンク表はアプリケーションに関する情報を格納し、この表にはCOUNTRY
列があります。このパーティション化戦略では、リストによるパーティションを使用して、各地域のパーティションを作成するマップ・オブジェクトを作成し、国値を使用して地域を決定します。この例は、「コンテナ・マップの作成」で詳細に説明されています。
レンジ・パーティション化された表をマップ・オブジェクトに使用する別の例について考えます。次のSQL文はアプリケーション・ルート内にマップ・オブジェクトを作成します。
CREATE TABLE app_con_admin.conmap (
department_id NUMBER NOT NULL)
PARTITION BY RANGE (department_id) (
PARTITION apppdb1 VALUES LESS THAN (100),
PARTITION apppdb2 VALUES LESS THAN (200),
PARTITION apppdb3 VALUES LESS THAN (300));
department_id
に基づいてアプリケーションPDB 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
句は必要ありません。CONTAINERS
を指定した最初の問合せに示されているように、問合せが単一のアプリケーションPDBにのみ関連する場合、問合せではこのアプリケーションPDBのコンテナIDをWHERE
句に指定する必要があり、この要件によってアプリケーション変更が生じることがあります。コンテナ・マップを使用する2番目の問合せでは、CONTAINERS
句が置き換えられてコンテナが指定されていません。これは、コンテナ・マップによって適切なアプリケーションPDBに問合せが送られるためです。また、コンテナ・マップを使用する問合せは一般にCONTAINERS
句を使用する問合せよりも効率的です。コンテナ・マップは、ALTER DATABASE
システム権限を持つ共通ユーザーが作成する必要があります。問合せはコンテナ・マップで有効にされているオブジェクトに対して実行され、問合せの権限はそのオブジェクトに対して付与されている権限によって判別されます。
注意:
-
コンテナ・マップは、CDBルートでは作成できません。
-
各アプリケーション・コンテナに1つのコンテナ・マップという制限があります。
-
データは、マップ・オブジェクトに定義されているパーティションと整合性のある方法で、PDBの表にロードされる必要があります。
-
アプリケーション・コンテナ内のアプリケーションPDBが変更された場合、マップ・オブジェクトはそれらの変更に対応して自動的に同期されません。たとえば、マップ・オブジェクトで参照されているアプリケーションPDBが、切断、名前変更または削除されていることがあります。そのような変更を反映するには、マップ・オブジェクトを手動で更新する必要があります。
44.6.2 コンテナ・マップの作成
マップ・オブジェクトを作成し、CONTAINER_MAP
データベース・プロパティをマップ・オブジェクトに設定することで、コンテナ・マップを作成します。
例44-16 コンテナ・マップの作成と使用
この例では、コンテナ・マップを使用する単純なアプリケーションを作成します。アプリケーション・コンテナにAMER
、EURO
およびASIA
という3つのアプリケーションPDBがあることを想定します。アプリケーションPDBは異なる地域(それぞれアメリカ、ヨーロッパおよびアジア)のデータを格納します。メタデータリンク表はアプリケーションに関する情報を格納し、COUNTRY
列があります。このパーティション化戦略では、リストによるパーティションを使用して、各地域のパーティションを作成するマップ・オブジェクトを作成し、国値を使用して地域を決定します。
-
SQL*Plusで、現在のコンテナがアプリケーション・ルートであることを確認します。
-
マップ・オブジェクトを作成します。
CREATE TABLE salesadm.conmap ( country VARCHAR2(30) NOT NULL) PARTITION BY LIST (country) ( PARTITION AMER VALUES ('US','MEXICO','CANADA'), PARTITION EURO VALUES ('UK','FRANCE','GERMANY'), PARTITION ASIA VALUES ('INDIA','CHINA','JAPAN'));
-
CONTAINER_MAP
データベース・プロパティをマップ・オブジェクトに設定します。ALTER PLUGGABLE DATABASE SET CONTAINER_MAP='salesadm.conmap';
-
アプリケーションのインストールを開始します。
ALTER PLUGGABLE DATABASE APPLICATION salesapp BEGIN INSTALL '1.0';
-
コンテナ・マップを使用して問い合せられるメタデータリンク表を作成します。
CREATE TABLE oe.cmtb SHARING=METADATA ( value VARCHAR2(30), country VARCHAR2(30));
-
問い合せる表に対してコンテナ・マップを有効にします。
ALTER TABLE oe.cmtb ENABLE CONTAINER_MAP;
-
CONTAINERS
句に対して問い合せる表が有効になっていることを確認します。ALTER TABLE oe.cmtb ENABLE CONTAINERS_DEFAULT;
-
アプリケーションのインストールを終了します。
ALTER PLUGGABLE DATABASE APPLICATION salesapp END INSTALL '1.0';
-
セッションを各アプリケーションPDBに切り替えて同期します。
ALTER SESSION SET CONTAINER=amer; ALTER PLUGGABLE DATABASE APPLICATION salesapp SYNC; ALTER SESSION SET CONTAINER=euro; ALTER PLUGGABLE DATABASE APPLICATION salesapp SYNC; ALTER SESSION SET CONTAINER=asia; ALTER PLUGGABLE DATABASE APPLICATION salesapp SYNC;
-
パーティション化戦略に基づいて、各アプリケーションPDBの
oe.cmtb
表に値を挿入します。ALTER SESSION SET CONTAINER=amer; INSERT INTO oe.cmtb VALUES ('AMER VALUE','US'); INSERT INTO oe.cmtb VALUES ('AMER VALUE','MEXICO'); INSERT INTO oe.cmtb VALUES ('AMER VALUE','CANADA'); COMMIT; ALTER SESSION SET CONTAINER=euro; INSERT INTO oe.cmtb VALUES ('EURO VALUE','UK'); INSERT INTO oe.cmtb VALUES ('EURO VALUE','FRANCE'); INSERT INTO oe.cmtb VALUES ('EURO VALUE','GERMANY'); COMMIT; ALTER SESSION SET CONTAINER=asia; INSERT INTO oe.cmtb VALUES ('ASIA VALUE','INDIA'); INSERT INTO oe.cmtb VALUES ('ASIA VALUE','CHINA'); INSERT INTO oe.cmtb VALUES ('ASIA VALUE','JAPAN'); COMMIT;
-
セッションをアプリケーション・ルートに切り替えて、コンテナ・マップを使用してデータを問い合せます。
ALTER SESSION SET CONTAINER=sales; SELECT value FROM oe.cmtb WHERE country='MEXICO'; SELECT value FROM oe.cmtb WHERE country='GERMANY'; SELECT value FROM oe.cmtb WHERE country='JAPAN';
最初の問合せの出力は
AMER VALUE
、2番目の問合せの出力はEURO VALUE
、3番目の問合せの出力はASIA VALUE
である必要があります。これらの値は、コンテナ・マップが正常に動作していることを示します。
親トピック: コンテナ・マップを使用したPDBでのパーティション化