8 PDBの再配置

PDBを異なるCDBまたはアプリケーション・コンテナに移動できます。

この章のトピックは、次のとおりです:

PDBの再配置について

再配置の際にソースPDBを読取り/書込みモードでオープンすると、すべての機能を利用できます。

再配置されたPDBを初めてオープンすると、Oracle Databaseにより、ソースPDBのアクティブなセッションが排出され、再配置されたPDBサービスにクライアント接続がリダイレクトされます。再配置されたPDBをオープンすることで、元のソースPDBの停止が開始します。ソースおよび再配置されたPDBが同時にオープンすることはありません。

次の図は、新しいCDBへの共通PDB(つまり、アプリケーションPDBでない)の再配置を示しています。ソースPDBはCDBルートに接続され、ターゲットPDBはCDBルートに接続されています。CREATE PLUGGABLE DATABASE ... RELOCATE文によって、データ・ブロック、UNDOブロックおよびREDOブロックが新しい場所にコピーされることに注意してください。データベース・リンクが必要です。

図8-1 ルート・コンテナへのPDBの再配置

図8-1の説明が続きます
「図8-1 ルート・コンテナへのPDBの再配置」の説明

ターゲットPDBがアプリケーションPDBまたはアプリケーション・ルートである場合は、次のオプションがあります。

  • PDBはアプリケーション・コンテナ内にアプリケーションPDBとして再配置できます。ターゲットPDBは同じCDBまたは別のCDB内のいずれにも指定できます。

  • アプリケーションPDBは、あるアプリケーション・ルートから別のアプリケーション・ルートに再配置できます。ターゲットPDBは同じCDBまたは別のCDB内のいずれにも指定できます。

  • 空のアプリケーション・ルートをあるCDBから別のCDBに再配置できますが、そのアプリケーション・ルートにはホストされるアプリケーションPDBが存在しない必要があります。

次に図は、この手法で新しいアプリケーションPDBをアプリケーション・コンテナに作成する方法を示しています。

図8-2 アプリケーション・コンテナへのPDBの再配置

図8-2の説明が続きます
「図8-2 アプリケーション・コンテナへのPDBの再配置」の説明

関連項目:

「PDB記憶域」

PDBの再配置の目的

この手法は、最小限の停止時間または停止時間なしでPDBを移動する最速の方法です。それ以外の手法では、ソースPDBを切断すると、PDBがターゲットCDBに接続されるまでPDBが停止している必要があります。

データ・センター間で、またはオンプレミス環境からクラウド環境にPDBを移動する場合は、すべてのデータを物理的に移動する必要があります。大規模なPDBでは、このプロセスは非常に時間がかかり、SLAの可用性コンポーネントに違反する可能性があります。PDBの再配置は、停止が不要になります。アプリケーションをオフラインにしたり、アプリケーションを変更またはネットワーク接続文字列を変更せずに、PDBを再配置できます。

PDB再配置の仕組み

操作では、PDBに関連付けられているファイルを新しい場所に移動し、PDBをターゲットCDBに追加して、そのPDBをオープンします。

PDBの再配置は、ソースPDBがオープンされてアクティブなセッションがあるときに、オンライン・ブロックレベル・コピーまたはソースPDBデータファイル、REDOおよびUNDOを実行します。ALTER PLUGGABLE DATABASE OPEN文のためにターゲットPDBがオンラインになると、Oracle Databaseではアクティブ・セッションを終了し、ソースPDBをクローズします。

Oracle Database 18cでは、データベース汎用セッションの排出が導入され、タイマーによってアクティブ・セッションを正常に終了できます。タイマーの期限が切れると、Oracle Databaseはすべてのアクティブ・セッションを終了し、再配置されたPDBに再接続します。この機能は、データベース・サービス・レベルおよびPDBレベルで呼び出されるすべてのメンテナンス操作(サービスの停止、サービスの再配置、PDBの再配置およびPDBの停止)に対して、デフォルトで有効になっています。

PDBの再配置サービスは、同じクラスタ・データベース内のCDBのインスタンス間、または異なるCDB間でPDBを再配置するOracle RACおよび単一インスタンス環境で使用できます。Oracle RAC環境でのファイングレイン再配置の例は、PDBインスタンス間でのサービスの再配置です。Oracle RACとOracle Clusterwareは、再配置中に接続されているクライアントへの影響を最小限にする上質な高可用性環境を提供します。たとえば、共有記憶域では、データファイルをコピーする必要性が最小限に抑制または除去されます。

この項では、次の項目について説明します。

ノート:

Oracle Clusterware環境で、異なるCDB間でPDBを再配置する場合は、SRVCTLを使用してデフォルトではないサービス・リソースを作成する必要があります。

関連項目:

SRVCTLのリファレンスは、『Oracle Clusterware管理およびデプロイメント・ガイド』を参照してください

PDBの再配置または停止時のサーバー・セッションの排出

計画メンテナンスの重要な要件は、アプリケーションの動作が中断されないようにする、PDBのセッションの排出またはフェイルオーバーです。

Oracle Database 18c以降では、PDBが再配置または停止されると、排出のためにセッションが自動的にマークされます。拡張可能な一連のルールを使用してルールを満たすまで続行され、データベース・セッションを排出するタイミングが決まります。ルールには次のものが含まれています。

  • 標準アプリケーション・サーバーの有効性のテスト

  • カスタムSQLの有効性のテスト

  • リクエスト境界が使用され、リクエストがアクティブでないこと

  • リクエスト境界が使用され、現在のリクエストが終了していること

  • セッションにリカバリ可能なセッションの状態が1つ以上あり、フェイルオーバー時に再作成可能なこと

典型的なユースケースは、接続プールからの接続の借用時、プールへ接続の返却時、およびバッチ・コミット時に、接続をテストするアプリケーション・サーバーおよびプールされたアプリケーションです。セッションの排出時に、データベース接続テストが自動的に捕捉され、接続をクローズして、テストの失敗ステータスが返されます。失敗ステータスを受信した後、アプリケーション・レイヤーでは別の接続をリクエストできます。このように、アプリケーションが中断されることはありません。

クライアントへの影響を最小限に抑える最適な構成には、FANおよびアプリケーション・コンティニュイティを有効にしたOracle RACの使用を検討してください。

関連項目:

計画メンテナンスでのデータベース・セッションの排出についてさらに学習するには、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください

PDBの再配置のステージ

PDBの再配置の詳細は、リスナー・ネットワークによって異なります。

この項では、次の項目について説明します。

共通のリスナー・ネットワークでのPDBの再配置

ソースとターゲットの場所が共通のリスナー・ネットワークを共有している場合は、SQL*Netレイヤーがクライアント接続を暗黙的に転送するため、クライアント接続の転送は必要ありません。

AVAILABILITY NORMAL

リスナー・ネットワークが共通である場合は、CREATE PLUGGABLE DATABASE ... RELOCATEAVAILABILITY NORMAL句を指定します。このオプションはデフォルトです。次の状況は、AVAILABILITY NORMALの一般的なユースケースを示しています。

  • 共有リスナー

    PDBの古い場所と新しい場所で同じリスナーを使用する場合、再配置が完了すると新しい接続は自動的にPDBの新しい場所にルーティングされます。この状況は、同じホストのCDB間での典型的な再配置です。この場合、PDBは新しい場所でリスナーに再登録されます。その他の接続処理は必要ありません。

  • 相互登録リスナー

    PDBが異なるリスナーを使用して、local_listenerおよびremote_listenerパラメータの構成を使用してそれぞれのリスナーの相互登録を利用する場合、再配置はシームレスです。PDBのサービスの可用性および場所が両方のリスナーに自動的に登録されます。この状況は、おそらくロード・バランシングを目的とした、データ・センター内のホスト間での典型的な再配置です。

共有リスナーおよび相互登録リスナーの環境では、すべてのデータベースからのサービスが共通のリスナー・ネットワークに公開されます。そのため、再配置されたPDBのサービスは共通のリスナー・ネットワークに即時に認識されます。サービス・ネームスペースの競合を回避するために、PDBのサービスの定義は、共通のリスナー・ネットワーク内で一意である必要があります。

共通のリスナー・ネットワークでの再配置のステージ

  1. ユーザーがCREATE PLUGGABLE DATABASE ... RELOCATE AVAILABILITY NORMALを発行します。

    このステップでは、元の場所からターゲットの場所にソースPDBのホット・クローンを実行します。ソースPDBは、SCNマーカーの暗黙的な開始時点でのデータファイル、UNDOブロックおよびREDOブロックをターゲットPDBにコピーします。

    このステップが完了すると、このPDBに対して、トランザクション的に一貫性のある2つのコピー(ソース・コンテナ内のコピーとターゲット・コンテナ内のコピー)が存在することになります。操作中は、ソースPDBで処理が中断なく続行されます。ソースPDBに接続しているアプリケーションのユーザーまたはアプリケーションは、再配置が実行中であることを認識しません。

    既存のすべてのアプリケーション接続およびこのステップの実行中に作成された新しい接続は、引き続きソースPDBに接続します。

  2. ユーザーがALTER PLUGGABLE DATABASE OPENを発行します。

    次の処理がバックグラウンドで実行されます。

    1. ターゲットPDBによって終了SCNのマーカーが暗黙的に設定され、暗黙的な終了SCNのマーカーを満たすためにメディア・リカバリの完了に必要なREDOまたはUNDOが適用されます。

    2. ターゲットPDBでメディア・リカバリが発生した場合は、ソースPDBでの排出アクティブ・セッションが開始されます。

    3. PDBサービスがリスナーに登録され、ターゲットCDBで使用できるようになります。

    4. ソースPDBがクローズされます。

    5. ターゲットPDBが読取り/書込みモードでオープンします。

      このステップで、ターゲットCDBへのPDBの再配置が完了します。操作の終了時に、接続が、新しく再配置されたPDBを指すようになります。

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

関連項目:

独立したリスナー・ネットワークでのPDBの再配置

独立したリスナーが相互登録を使用しない場合、ターゲットCDBとソースCDBのリスナーには、相互の情報またはそれぞれの公開されたサービスの情報がありません。

AVAILABILITY MAX

CREATE PLUGGABLE DATABASE ... RELOCATEAVAILABILITY MAX句は、SQL*Netレイヤーに元のリスナーを再構成するように暗黙的に指示します。この状況は、データ・センター間でPDBを再配置する場合によくあります。この構成は、Oracle Internet Directory (OID)またはLDAPサーバーを更新する間、またはクライアント接続を変更する間に一時的に使用することが意図されています。

ローカル・リスナーがOracle RAC構成の単一クライアント・アクセス名(SCAN)リスナーにリダイレクトされる場合、このリスナーはクライアント接続リクエストを別のクラスタ・ノードにさらにリダイレクトすることが必要な場合があります。複数リダイレクトは、Oracle Netリスナーのデフォルトではサポートされません。SCANリスナーは任意のノードに接続リクエストをルーティングできるため、ALLOW_MULTIPLE_REDIRECTS_listener_nameパラメータをすべてのSCANリスナーのlistener_nameに設定して、それをクラスタ内のすべてのlistener.oraファイルで設定します。たとえば、SCANリスナーの名前がlistener_scan1listener_scan2およびlistener_scan3の場合は、すべての宛先ホストのlistener.oraファイルに次の設定が必要になります。

ALLOW_MULTIPLE_REDIRECTS_LISTENER_SCAN1=YES
ALLOW_MULTIPLE_REDIRECTS_LISTENER_SCAN2=YES
ALLOW_MULTIPLE_REDIRECTS_LISTENER_SCAN3=YES

注意:

ALLOW_MULTIPLE_REDIRECTS_listener_nameパラメータをノード・リスナーに設定すると、特定のネットワーク構成で無限のリダイレクト・ループが可能になるため、設定しないでください。

独立したリスナー・ネットワークでの再配置のステージ

  1. ユーザーがCREATE PLUGGABLE DATABASE ... RELOCATE AVAILABILITY MAXを発行します。

    このステップでは、元の場所からターゲットの場所にソースPDBのホット・クローンを実行します。ソースPDBは、SCNマーカーの暗黙的な開始時点でのデータファイル、UNDOブロックおよびREDOブロックをターゲットPDBにコピーします。

  2. ユーザーがALTER PLUGGABLE DATABASE OPENを発行します。

    次の処理がバックグラウンドで実行されます。

    1. ターゲットPDBによって終了SCNのマーカーが暗黙的に設定され、暗黙的な終了SCNのマーカーを満たすためにメディア・リカバリの完了に必要なREDOまたはUNDOが適用されます。

    2. ターゲットPDBでメディア・リカバリが発生した場合は、ソースPDBでの排出アクティブ・セッションが開始されます。

    3. ソースPDBのLISTENER_NETWORKS初期化パラメータが転送先アドレスで暗黙的に更新され、ソースCDBのリスナーPDBサービスが転送先アドレスで更新されます。

    4. メディア・リカバリが完了すると、ターゲットPDBが読取り専用モードでオープンします。

      このステージでは、ターゲットPDBの問合せのみが許可されます。問合せは、ソースPDBで実行された場合とまったく同様に動作します。ただし、DMLを試行する接続は完了しません。

    5. 読取り専用接続が新しいホスティング・リスナーに即時に転送され、新規の読取り/書込み接続が新しいホスティング・リスナーに転送され、そこでターゲットPDBが一貫性のある状態でオープンされるまでスピンします。

    6. ソースPDBによって、永続的な接続を終了するSHUTDOWN IMMEDIATEが実行されます。

    7. ターゲットPDBが読取り/書込みモードでオープンします。

      このステップで、ターゲットCDBへのPDBの再配置が完了します。操作の終了時に、接続が、新しく再配置されたPDBを指すようになります。

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

ノート:

更新が完了するまでツームストーンPDBと呼ばれるアーティファクトがソースCDBに残り、PDBのネームスペースを保護し、リスナー転送構成を維持します。ソースCDBのルートでは、ツームストーンPDBがRELOCATEDステータスでV$CONTAINERSに表示されます。ターゲットPDBに直接接続を指定するためにアプリケーション接続文字列を変更した場合は、ソースCDBからツームストーンPDBを削除できます。

関連項目:

再配置によるPDB作成

CREATE PLUGGABLE DATABASE ... RELOCATE文で、PDBの別のコンテナに移動します。

ターゲットCDBはPDBの再配置先となるCDBです。ターゲットPDBは再配置されるPDBです。CREATE PLUGGABLE DATABASE ... RELOCATE操作が完了すると、PDBがソースCDBから移動され、ターゲットCDBに追加されます。

一般的な前提条件

「表5-3」のPDBの再配置に適用される質問に対処します。この表では、様々な要因に基づいて指定する必要があるCREATE PLUGGABLE DATABASEの句について説明しています。また、PDB作成の一般的な前提条件で説明している前提条件を満たします。

特定の前提条件

PDBを再配置する前に、次の前提条件を満たす必要があります。

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

  • ソースCDBでは、すべてのデータベース・インスタンスでPDBのサービスとオープン状態を保存する必要があります。管理者としてCDBルートにログインし、次の文を発行します。

    ALTER PLUGGABLE DATABASE ALL SAVE STATE INSTANCES=ALL;

    このステップにより、PDBの再配置操作の際、ターゲットCDBでPDBサービスが自動起動されるようになります。

  • ターゲットCDBでは、現行ユーザーはCDBのルートのCREATE PLUGGABLE DATABASEシステム権限を持っている必要があります。

  • ターゲットCDBがARCHIVELOGモードでない場合、PDBは操作時に読取り専用オープン・モードである必要があります。この要件は、ターゲットCDBがARCHIVELOGモードの場合は適用されません。

  • ターゲットCDBにあるデータベース・リンクに次の前提条件が適用されます。

    • データベース・リンクで、ターゲットCDBからソースCDBへの接続が有効である必要があります。データベース・リンクは、ソースCDBのルートに接続する必要があります。PDBがアプリケーションPDBである場合、データベース・リンクはそのアプリケーション・ルートに接続する必要があります。

    • データベース・リンクがPDBの現在のCDB内で接続するユーザーには、CREATE PLUGGABLE DATABASEシステム権限またはSYSOPER管理権限のいずれかが必要です。

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

  • ソースCDBとターゲットCDBのプラットフォームが次の要件を満たしている必要があります。

    • endiannessが同じである必要があります。

    • ソース・プラットフォームにインストールされているデータベース・オプションは、ターゲット・プラットフォームにインストールされているデータベース・オプションと同じか、サブセットである必要があります。

  • ターゲットCDBの文字セットがAL32UTF8でない場合、PDBの現在のCDBおよび再配置先のCDBには互換性のある文字セットおよび各国語文字セットが必要です。

    ターゲットCDBの文字セットがAL32UTF8である場合、この要件は適用されません。

  • アプリケーションPDBを作成している場合は、ソースPDBとターゲット・アプリケーション・コンテナに同じアプリケーション名とバージョンを指定する必要があります。

PDBを再配置するには:

  1. SQL*Plusで、CREATE PLUGGABLE DATABASEシステム権限を持つユーザーとしてターゲットCDBにログインします。

  2. 現在のコンテナがターゲットCDBまたはターゲット・アプリケーション・コンテナのルートであることを確認します。

  3. FROM句を指定してCREATE PLUGGABLE DATABASE ... RELOCATE文を実行します。

    FROM句でソースPDBを指定し、RELOCATE句を含めます。PDBの古い場所から新しい場所に接続をリダイレクトするには、AVAILABILITY MAX句を指定します。他の句が必要な場合はそれらを指定します。

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

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

  4. (オプション)ファイルのコピー操作のステータスを確認するには、V$SESSION_LONGOPSを問い合せます。

    OPNAMES列は、データファイル・コピーにはkpdbfCopyTaskCbk、REDOファイルのコピーにはkcrfremnocが表示されます。

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

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

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

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

    ノート:

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

例8-1 リモートCDBからのPDBの再配置

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

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

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

この例では、様々な要因に基づき、pdb1という名前のPDBをリモートCDBから再配置します。この例では、次の要因を想定しています。

  • 現行ユーザーには、ターゲットCDBのルートでのCREATE PLUGGABLE DATABASEシステム権限があります。

  • ソースCDBへのデータベース・リンク名はlnk2srcです。このデータベース・リンクは、次のSQL文を使用して作成されました。

    CREATE PUBLIC DATABASE LINK lnk2src CONNECT TO c##myadmin IDENTIFIED BY password USING 'MYCDB';

    共通ユーザーc##myadminには、ソースCDB内のSYSOPER管理権限とCREATE PLUGGABLE DATABASEシステム権限があります。

  • PATH_PREFIX句は必要ありません。

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

    Oracle Managed Filesが有効であるか、またはPDB_FILE_NAME_CONVERT初期化パラメータが設定されています。これらのファイルは、Oracle Managed Files構成または初期化パラメータ設定に基づいて新しい場所に移動されます。

  • PDBにはストレージ制限は必要ありません。したがって、STORAGE句は必要ありません。

  • ターゲットの場所に、作成される新しい一時ファイルと同じ名前のファイルはありません。したがって、TEMPFILE REUSE句は必要ありません。

  • ソースPDBから再配置されたPDBに接続を自動的に再配置する必要があります。したがって、AVAILABILITY MAX句が含まれます。

次の文は、ソースCDBから現在のCDBにpdb1 PDBを再配置します。

CREATE PLUGGABLE DATABASE pdb1 FROM pdb1@lnk2src RELOCATE AVAILABILITY MAX;

関連項目: