日本語PDF

10 プロキシPDBとしてのPDBの作成

リモートCDBのPDBを参照することで、PDBをプロキシPDBとして作成できます。

プロキシPDBの作成について

プロキシPDBは、リモートCDB内のPDBへのアクセスを提供します。シンボリック・リンクに似ています。

CREATE PLUGGABLE DATABASE文では、異なるCDB内のPDB (参照先PDBと呼ばれています)を参照することでプロキシPDBを作成します。リモートPDBのローカル・コンテンツが必要な場合は、プロキシPDBを使用できます。また、異なる複数のCDB内のアプリケーション・コンテナに同じアプリケーションがある場合、それらのアプリケーション・ルートはプロキシPDBを使用して同期を維持できます。

この手法を使用するには、プロキシPDBを含めるCDBでCREATE PLUGGABLE DATABASE文を実行します。次を含める必要があります。

  • プロキシPDBを作成していることを指定するためのAS PROXY句。

  • プロキシPDBが参照しているPDBを指定するFROM句。

  • FROM句にある参照先PDBの現在の場所へのデータベース・リンク。データベース・リンクはプロキシPDBを含むCDBのルートに作成する必要があり、データベース・リンクはリモートCDBのルートまたはリモート参照先PDBに接続します。

次の図は、この手法でリモートCDB内のPDBを参照するプロキシPDBがどのように作成されるかを示しています。

図10-1 リモート・プロキシPDBの作成

図10-1の説明が続きます
「図10-1 リモート・プロキシPDBの作成」の説明

アプリケーション・コンテナにプロキシPDBを作成できます。そのためには、参照先PDBがアプリケーション・ルートまたは別のCDBのアプリケーション・コンテナ内のアプリケーションPDBである必要があります。データベース・リンクはプロキシPDBを含むアプリケーション・コンテナのルートに作成する必要があり、データベース・リンクはリモート・アプリケーション・コンテナのルートまたはリモート参照先アプリケーションPDBに接続します。

次の図は、この手法でアプリケーション・コンテナ内のリモート参照先PDBに基づいてプロキシPDBをアプリケーション・コンテナに作成する方法を示しています。

図10-2 アプリケーション・コンテナ内のリモート・プロキシPDBの作成

図10-2の説明が続きます
「図10-2 アプリケーション・コンテナ内のリモート・プロキシPDBの作成」の説明

プロキシPDBを作成する前に、「表5-3」のプロキシPDBの作成に適用される質問に対処します。この表では、様々な要因に基づいて指定する必要があるCREATE PLUGGABLE DATABASEの句について説明しています。

プロキシPDBおよびSQL文

原則として、プロキシPDBが現在のコンテナである場合は、プロキシPDBでの実行のために発行されたSQL文は参照先PDB内で実行されます。

リモート実行の結果はプロキシPDBに返されます。たとえば、データ定義言語(DDL)文、データ操作言語(DML)文およびプロキシPDBで実行される問合せは、実行のために参照先PDBに送信され、結果はプロキシPDBに返されます。

ルールに対する例外が1つあります。プロキシPDBが現在のコンテナの場合は、ALTER PLUGGABLE DATABASE文およびALTER DATABASE文を実行すると、これらの文はプロキシPDBにのみ影響を与えます。これらは実行のために参照先PDBに送信されません。同様に、現在のコンテナが、プロキシPDBが属するルートである場合、ALTER PLUGGABLE DATABASE文はプロキシPDBにのみ影響します。たとえば、CDBルート、アプリケーション・ルートまたはプロキシPDBで実行されたALTER PLUGGABLE DATABASE文は、プロキシPDBをオープンまたはクローズできますが、この文は参照先PDBをオープンまたはクローズしません。

プロキシPDBおよびデータベース・リンク

データベース・リンクはプロキシPDBの作成時に必要です。

プロキシPDBの作成後は、作成時に指定したデータベース・リンクがそのプロキシPDBで使用されなくなります。かわりに、プロキシPDBは参照先PDBと直接通信します。

この直接通信は、参照先PDBを含むCDBのリスナーのポート番号とホスト名を必要とします。プロキシPDBの作成時に、プロキシPDBはデフォルトで次の値を使用します。

  • リスナー・ポート番号: 1521

    参照先PDBのリスナーがデフォルト・ポート番号を使用しない場合は、PORT句を使用して、リスナーのポート番号を指定する必要があります。プロキシPDBの作成時にポート番号を指定するか、プロキシPDBを変更してポート番号を変更できます。

  • リスナー・ホスト名: 参照先PDBを含むCDBのホスト名

    参照先PDBのリスナーがデフォルト・ホスト名を使用しない場合は、HOST句を使用して、リスナーのホスト名を指定する必要があります。プロキシPDBの作成時にホスト名を指定するか、プロキシPDBを変更してホスト名を変更できます。

プロキシPDBおよび認証

プロキシPDBのセッションでは、パスワード認証のみがサポートされます。

プロキシPDBおよびリスナー

PDBのホスト名とポート番号の設定は、プロキシPDBがPDBを参照する場合にのみ重要です。

HOST句

CREATE PLUGGABLE DATABASE文のHOST句では、作成されるPDBのリスナーのホスト名を指定します。

デフォルトでは、リスナーのホスト名は作成されるPDBのホスト名と同じです。次の両方の条件を満たす場合にHOST句を指定します。

  • リスナーのホスト名は、作成されるPDBのホスト名と異なります。

  • 作成されるPDBを参照するプロキシPDBの作成を計画します。

プロキシPDBは、データベース・リンクを使用して、その参照先PDBとの通信を確立します。通信が確立した後、プロキシPDBでは、データベース・リンクを使用しないで参照先PDBと直接通信します。プロキシPDBが正常に機能するためにはリスナーのホスト名が正しい必要があります。

例10-1 HOST句

HOST='myhost.example.com'

関連項目:

PORT句

CREATE PLUGGABLE DATABASE文のPORT句では、作成されるPDBのリスナーのポート番号を指定します。

デフォルトでは、作成されるPDBのポート番号は1521です。次の両方の条件を満たす場合にPORT句を指定します。

  • リスナーのポート番号は1521ではありません。

  • 作成されるPDBを参照するプロキシPDBの作成を計画します。

プロキシPDBは、データベース・リンクを使用して、その参照先PDBとの通信を確立します。通信が確立した後、プロキシPDBでは、データベース・リンクを使用しないで参照先PDBと直接通信します。プロキシPDBが正常に機能するためにはリスナーのポート番号が正しい必要があります。

例10-2 PORT句

PORT=1599

ノート:

プロキシPDBの作成

別のCDBのPDBを参照することで、プロキシPDBを作成します。

前提条件

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

  • 「PDB作成の一般的な前提条件」で説明している前提条件を満たします。

  • 現行ユーザーは、プロキシPDBが作成されているCDBのルートでCREATE PLUGGABLE DATABASEシステム権限を持っている必要があります。

  • 参照先PDBを含むCDBはローカルUNDOモードである必要があります。

  • 参照先PDBを含むCDBはARCHIVELOGモードである必要があります。

  • プロキシPDBの作成時には、参照先PDBが読取り/書込みオープン・モードである必要があります。参照先PDBのオープン・モードは、プロキシPDBの作成後に変更できます。

  • データベース・リンクは、プロキシPDBが作成されているCDBのルートから参照先PDBの場所への接続を有効にする必要があります。データベース・リンクは、リモートCDBのルート、またはリモートPDBのいずれかに接続できます。

  • データベース・リンクが、参照先PDBを含むリモートCDBのルートに接続する場合、データベース・リンクが接続するユーザーは、共通ユーザーである必要があります。

  • データベース・リンクが参照先PDBに接続する場合、データベース・リンクが参照先PDBで接続するユーザーは、CREATE PLUGGABLE DATABASEシステム権限を持っている必要があります。

  • プロキシPDBをアプリケーション・コンテナに作成している場合は、次の前提条件が適用されます。
    • 参照先PDBがアプリケーション・ルートまたはアプリケーション・コンテナ内のアプリケーションPDBである必要があります。

    • プロキシPDBのアプリケーション・コンテナのアプリケーション名およびバージョンは、参照先PDBのアプリケーション名およびバージョンと一致する必要があります。

    • プロキシPDBがアプリケーション・コンテナに作成されている場合、データベース・リンクは、プロキシPDBが作成されているアプリケーション・コンテナのルートから参照先PDBの場所への接続を有効にする必要があります。データベース・リンクは、リモート・アプリケーション・コンテナのルート、またはリモート・アプリケーションPDBのいずれかに接続できます。

    • データベース・リンクが、参照先PDBを含むリモート・アプリケーション・コンテナのルートに接続する場合、データベース・リンクが接続するユーザーは、アプリケーション共通ユーザーである必要があります。

    • データベース・リンクが参照先アプリケーションPDBに接続する場合、データベース・リンクが参照先アプリケーションPDBで接続するユーザーは、CREATE PLUGGABLE DATABASEシステム権限を持っている必要があります。

    ノート:

    アプリケーション・コンテナ内の参照先PDBに基づいてプロキシPDBをCDBルートに作成できます。

プロキシPDBを作成するには:

  1. SQL*Plusで、現在のコンテナがCDBルートまたはプロキシPDBが作成されているアプリケーション・ルートであることを確認します。

    現在のコンテナがCDBルートの場合、プロキシPDBはCDBに作成されます。現在のコンテナがアプリケーション・ルートの場合、プロキシPDBはアプリケーション・コンテナ内に作成されます。

  2. CREATE PLUGGABLE DATABASE文を実行します。AS PROXY句を指定し、FROM句でデータベース・リンク名を指定して参照先PDBを指定します。他の句が必要な場合はそれらを指定します。

    作成したプロキシPDBはマウント・モードになり、そのステータスはNEWです。PDBのオープン・モードは、V$PDBSビューのOPEN_MODE列を問い合せることで確認できます。CDB_PDBSまたはDBA_PDBSビューのSTATUS列を問い合せて、PDBのステータスを表示できます。

    PDBの新しいデフォルト・サービスが作成されます。サービスの名前はPDBと同じになり、このサービスを使用してPDBにアクセスできます。このサービスにアクセスするクライアントには、Oracle Net Serviceが正しく構成されている必要があります。

  3. 新しいPDBを読取り/書込みモードでオープンします。

    Oracle Databaseで新しいPDBをCDBに統合するには、PDBを読取り/書込みモードでオープンする必要があります。PDBを読取り専用モードでオープンしようとすると、エラーが返されます。PDBが読取り/書込みモードでオープンされると、そのステータスはNORMALになります。

  4. PDBをバックアップします。

    PDBは、バックアップしないとリカバリできません。

ノート:

プロキシPDBの作成時にエラーが返された場合は、作成されたPDBがUNUSABLE状態である可能性があります。CDB_PDBSまたはDBA_PDBSビューを問い合せてPDBの状態を確認したり、アラート・ログをチェックしてPDBの作成エラーについてさらに学習できます。使用不可のPDBは削除することのみができ、使用不可のPDBと同じ名前のPDBを作成できるようにするには、その前に削除する必要があります。

例10-3 リモート・プロキシPDBの作成

この例で、新しいPDBが属するルートはCREATE PLUGGABLE DATABASE文の実行時の現在のコンテナによって決まります。

  • 現在のコンテナがCDBルートの場合、新しいPDBはCDBルートに作成されます。

  • 現在のコンテナがアプリケーション・コンテナ内のアプリケーション・ルートの場合、新しいPDBはアプリケーション・ルート内にアプリケーションPDBとして作成されます。

この例では、様々な要因に基づいてpdb1という名前のリモート・プロキシPDBを作成します。この例では、次の要因を想定しています。

  • 参照先PDBのCDBへのデータベース・リンク名はpdb1_linkです。

  • FILE_NAME_CONVERT句およびCREATE_FILE_DEST句は必要ありません。

    Oracle Managed Filesが有効であるか、またはPDB_FILE_NAME_CONVERT初期化パラメータが設定されています。SYSTEMファイルおよびSYSAUXファイルは、Oracle Managed Files構成または初期化パラメータ設定に基づいて新しい場所にコピーされます。

前述の要因に基づき、次の文によってpdb1プロキシPDBが作成されます。

CREATE PLUGGABLE DATABASE pdb1 AS PROXY FROM pdb1@pdb1_link;