4 Oracle GoldenGate Replicatの構成

この章では、非統合または統合モードのいずれかでReplicat適用プロセスを構成する手順について説明します。

内容は次のとおりです。

様々なReplicatモードからの選択

データベース環境の様々なReplicatモードについて学習します。

内容は次のとおりです。

使用する適用方法の決定

Replicatプロセスは、レプリケートされたデータをOracleターゲット・データベースに適用します。

Oracleターゲット・データベースの場合、非統合モードまたは統合モードのいずれかでReplicatをパラレルに実行できます。特定の機能で別のタイプのReplicatが必要な場合を除き、Oracleでは並列Replicatを使用することをお薦めします。

次の表に、それぞれのReplicatでサポートされる機能を示します。

機能 並列Replicat 統合Replicat 調整Replicat クラシックReplicat

バッチ処理

あり

あり

あり

あり

バリア・トランザクション

あり

あり

あり

なし

依存関係の計算

あり

あり

なし

なし

自動並列化

ノート:

デフォルトでは、自動並列化は無効になっています。デフォルト設定では、4つのスレッドのみが使用されます。MIN_PARALLELISMおよびMAX_PARALLELISMを使用するようにReplicatを変更すると、自動並列化が使用されます。

あり

あり

なし

なし

DMLハンドラ

あり。統合モード

あり

なし

なし

プロシージャ・レプリケーション

あり。統合並列Replicat (iPR)に使用されます

あり

なし

なし

自動CDR

あり。iPRによってのみ使用されます

あり

なし

なし

依存関係を認識したトランザクション分割

あり

なし

なし

なし

RACノード間の処理

あり

なし

あり

なし

ALLOWDUPTARGETMAP

ALLOWDUPTARGETMAP | NOALLOWDUPTARGETMAPを参照してください。

なし。iPRを備えたOracle Database

なし。Oracle Database

あり

あり

内容は次のとおりです。

並列Replicatについて

並列Replicatは、パフォーマンス向上のために並列でトランザクションを適用する別種のReplicatです。

統合Replicatと同様に、トランザクション間の依存関係が考慮されます。データベースの外部で依存性の計算、マッピングの並列処理および適用が実行されるため、負荷が別のサーバーに移されます。このプロセスでトランザクションの整合性が維持されます。さらに、並列Replicatは、大きなトランザクションをチャンクに分割してパラレルに適用することで、大きなトランザクションのパラレル適用をサポートします。

ノート:

OLTPワークロードで最適なパフォーマンスが得られるように、非統合モードの並列Replicatをお薦めします。

並列Replicatおよび統合並列Replicatは、Oracleデータベースのみでサポートされます。ただし、非統合オプションの使用時には、並列Replicatはすべてのデータベースをサポートします。

並列Replicatを使用する場合は、次の値(デフォルト値)を確認してください。
  • 証跡内のメタデータ。証跡が12.1未満でフォーマットされている場合は、並列Replicatを使用できません。

  • 証跡ファイルのスケジューリング列。

  • UPDATERCORDFORMAT COMPACTパラメータ

統合並列Replicatでは、Replicatはデータをターゲット・データベースに適用するインバウンド・サーバーにLCRを送信します。通常の並列Replicatでは、その他の非統合Replicatの動作と同様に、SQL文としてLCRをデータベースに直接適用します。

並列Replicatのコンポーネントは次のとおりです。
  • マッパーはパラレルに動作し、証跡の読取り、証跡レコードのマッピング、マップされたレコードの統合Replicat LCR形式への変換、および後続の処理のためのマージャへのLCRの送信を実行します。1つのマッパーが1つのセットのトランザクションをマップしている間に、次のマッパーが次のセットのトランザクションをマップします。証跡情報は分割されますが、証跡情報が正しく順序付けされるため、証跡ファイルはそのままの状態になります。

  • マスター・プロセスにはコレータとスケジューラの2つのスレッドがあります。コレータはマスターからマップされたトランザクションを受け取り、依存関係の計算のために証跡の順序に戻します。スケジューラがトランザクション間の依存関係を計算し、トランザクションを独立したバッチにグループ化し、ターゲット・データベースに適用するためにバッチをアプライアに送信します。

  • アプライアは配列実行のためにバッチ内のレコードを並べ替えます。さらにバッチをターゲット・データベースに適用し、エラー処理を実行します。また、適用したトランザクションをチェックポイント表で追跡します。

ノート:

並列Replicatでは、外部キー列が索引付けされている必要があります。
並列Replicatの利点

パラレルReplicatの使用には、次の利点があります。

  • 統合並列Replicatは、複数のトランザクションを同時に適用するパラレル適用プロセス間で高負荷ワークロードを自動的にパーティション化しながら、ソース・トランザクションの完全性とアトミック性を保持できます。適用プロセスの最小数および最大数の両方をPARALLELISMおよびMAX_PARALLELISMパラメータで構成できます。Replicatは、ワークロードが増加すると、追加のサーバーを自動的に追加し、ワークロードが軽減されると、再度下方に調整します。

  • 統合並列Replicatには、構成のための最小限の作業が必要です。すべての作業は、レンジ・パーティションを構成することなく1つのReplicatパラメータ・ファイル内に構成されます。

  • 高パフォーマンスの適用ストリーミングは、軽量アプリケーション・プログラミング・インタフェース(API)によって、Replicatとインバウンド・サーバーの間で統合並列Replicatのために有効化されます。

  • バリア・トランザクションは、統合並列Replicatによって複数のサーバー適用プロセス間で調整されます。

  • DDL操作は、DDLの実行前にサーバー処理が完了まで待機することで、バリアを強制する直接トランザクションとして処理されます。

  • 一時的な重複主キー更新は、統合並列Replicatによってシームレスに処理されます。

  • 並列Replicatでは、単一の大規模トランザクションを小さなチャンクに分割して、そのチャンクをパラレルに適用できます。詳細は、SPLIT_TRANS_RECSを参照してください。
パラレル・レプリケーション・アーキテクチャ

パラレル・レプリケーション・プロセスは、統合モードの場合に、Oracle Database内で使用可能な適用処理機能を活用します。

単一のReplicat構成では、インバウンド・サーバーの複数の子プロセス(適用サーバーと呼ばれる)が、元のトランザクション原始性を維持しつつ、トランザクションをパラレルに適用します。

次のアーキテクチャ図は、非統合パラレルReplicatの証跡ファイルからターゲット・データベースへのパラレル・レプリケーションの様々なプロセスを介した変更レコードのフローを表します。

para_rep_arch.pngの説明が続きます
図para_rep_arch.pngの説明

マッパーが証跡ファイルを読み取ってレコードをマップし、マップしたレコードをマスターに転送します。バッチはアプライアに送信されて、ターゲット・データベースに適用されます。

マスター・プロセスにはコレータとスケジューラの2つの個別のスレッドがあります。コレータはマッパーの管理とマッパーとの通信を行い、さらにマップされたトランザクションを受信して、単一の順序ストリームに並べ替えます。スケジューラはアプライアの管理とアプライアとの通信を行い、さらにコレータからトランザクションを読み取り、バッチにしてアプライアに対してスケジュールします。

スケジューラ・コントローラはスケジューラと通信して必要な情報(現在の低水位標の位置など)を収集します。スケジューラ・コントローラはOracle DatabaseのCDBモードに必要で、これにより、様々なターゲットPDBに関連する情報を集約して、統一された状況をレポートします。スケジューラ・コントローラは、CDBモードでない場合でもシンプルで統一された実装を実現するために作成されています。各プロセスがパラメータ・ファイルを読み取り、単一のチェックポイント・ファイルを共有します。

非統合Replicatについて

非統合モードでは、Replicatプロセスは標準のSQLを使用してデータを直接ターゲット・データベースに適用します。このモードでは、Replicatは次のように動作します。

  • Oracle GoldenGate証跡を読み取ります。

  • データのフィルタリング、マッピング、および変換を実行します。

  • ソース・データベースのDMLまたはDDLトランザクションを表すSQL文を作成します(コミット順)。

  • Oracle Call Interface (OCI)でSQLをターゲットに適用する。

次の図は、非統合モードでのReplicatの構成を示しています。

統合Replicatモードでサポートされない機能を多用する場合は、非統合Replicatを使用してください(「統合Replicatについて」を参照)。

条件付きReplicat構成を使用することで、トランザクションを非統合Replicatと並行して適用できます。

統合Replicatについて

統合モードでは、Replicatプロセスは、Oracle Database内で使用可能な適用処理機能を利用します。このモードでは、Replicatは次のように動作します。

  • Oracle GoldenGate証跡を読み取ります。

  • データのフィルタリング、マッピング、および変換を実行します。

  • ソース・データベースDMLトランザクションを表す論理変更レコード(LCR)を構築する(コミットされた順)。DDLはReplicatによって直接適用されます。

  • 軽量ストリーミング・インタフェースによって、データベース・インバウンド・サーバーと呼ばれるターゲット・データベースのバックグラウンド・プロセスにアタッチする。

  • データがターゲット・データベースに適用されるインバウンド・サーバーにLCRを転送します。

次の図は、統合モードでのReplicatの構成を示しています。

単一のReplicat構成内で、適用サーバーと呼ばれるインバウンド・サーバーの複数の子プロセスがトランザクションをパラレルに適用し、元のトランザクションのアトミック性を保持します。この並列度は、Replicatプロセスの構成時、または必要に応じて動的に、ターゲット・システムのサポートに応じて増加できます。次の図は、2つの並列適用サーバーで構成された統合Replicatを示しています。

統合Replicatはトランザクションを非同期に適用します。高速のスループットを達成するために、相互依存性のないトランザクションを安全に実行して順不同でコミットできます。相互依存性のあるトランザクションは、ソースと同じ順序で適用されます。

インバウンド・サーバーのリーダー・プロセスは、ターゲット・データベースで定義される制約(主キー、一意キー、外部キー)に基づいて、ワークロードのトランザクション間の相互依存性を計算します。バリア・トランザクションおよびDDL操作も自動的に管理されます。コーディネータ・プロセスは、複数のトランザクションを調整し、適用サーバー間の順序を管理します。

インバウンド・サーバーが構成済機能または列タイプをサポートしていない場合、Replicatはインバウンド・サーバーから切断して、インバウンド・サーバーがキューのトランザクションを完了するのを待機し、OCIを使用して直接適用モードでトランザクションをデータベースに適用します。Replicatは、直接トランザクションの適用後に統合モードで処理を再開します。

次の機能は、Replicatによって直接モードで適用されます。

  • DDL操作

  • 順序操作

  • TABLE内のSQLEXECパラメータまたはMAPパラメータ

  • EVENTACTIONS処理

  • UDT

    ノート:

    デフォルトでは、UDTはインバウンド・サーバーによって適用されます。NOUSENATIVEOBJSUPPORTが設定されている場合にのみ、Extract処理がReplicatによって直接実行されます。

トランザクションは、直接適用モードでシリアルに適用されるため、このような操作を多用すると、統合Replicatモードのパフォーマンスが低下する場合があります。統合Replicatは、適用処理のほとんどが統合モードで実行可能な場合に、最高のパフォーマンスを発揮します(『Oracle DatabaseのためのOracle GoldenGateの使用』インスタンス化後の処理の監視および制御に関する項を参照)。

ノート:

ユーザー・イグジットは統合モードで実行されます。ただし、終了コードがレプリケーション・ストリームのデータに依存している場合は、ユーザー・イグジットによって予期しない結果が発生することがあります。

ノート:

統合Replicatでは、外部キー列が索引付けされている必要があります。
統合Replicatの利点

非統合Replicatではなく統合Replicatを使用する利点は次のとおりです。

  • 統合Replicatは、複数のトランザクションを同時に適用するパラレル適用プロセス間で自動的にパーティション化でき、ソース・トランザクションの完全性とアトミック性を保持します。適用プロセスの最小数および最大数の両方をPARALLELISMおよびMAX_PARALLELISMパラメータで構成できます。Replicatは、ワークロードが増加すると、追加のサーバーを自動的に追加し、ワークロードが軽減されると、再度下方に調整します。

  • 統合Replicatでは、最小の作業を構成する必要があります。すべての作業は、レンジ・パーティションを構成することなく1つのReplicatパラメータ・ファイル内に構成されます。

  • 高パフォーマンスの適用ストリーミングは、Replicatおよびインバウンド・サーバー間で、軽量アプリケーション・プログラミング・インタフェース(API)によって、統合Replicatで有効化されます。

  • バリア・トランザクションは、複数のサーバー適用プロセス間で、統合Replicatによって調整されます。

  • DDL操作は、DDLの実行前にサーバー処理が完了まで待機することで、バリアを強制する直接トランザクションとして処理されます。

  • 一時的な重複主キー更新は、統合Replicatによってシームレスに処理されます。

統合Replicatの要件

統合Replicatを使用するには、次の条件を満たす必要があります。

  • 表間の依存性の計算およびターゲットでの同時トランザクションのスケジューリングをサポートするには、サプリメンタル・ロギングをソース・データベースで有効にする必要があります。必要なロギングの有効化の手順は、「ロギング・プロパティの構成」を参照してください。このロギングは任意の時点で有効化できますが、その前に、Oracle GoldenGateプロセスを開始します。

  • 統合並列ReplicatはOracle Database 12.2.0.1以上でサポートされます。

Extractでの各種Replicatモードの使用

お薦めするOracle GoldenGate構成は、Oracleバージョンによってサポートされる場合、1つのExtractをOracleソースで使用し、Oracleターゲットのソース・データベースごとに1つの並列Replicatを使用することです。

インバウンド・サーバーを使用するか、必要時に直接適用に切り替えることで、1つの統合Replicat構成ですべてのOracleデータ型をサポートし、ソース・トランザクションの完全性を保持します。必要に応じて、並列度設定を目的の適用パフォーマンス・レベルに調整できます。

各Extractグループでは、表のデータ型および属性に基づいて、処理モードに適したオブジェクトを処理する必要があります。一方のExtractのオブジェクトに、もう一方のExtractのオブジェクトのDMLまたはDDL依存性を含めることはできません。同じタイプの分離をReplicat構成に適用する必要があります。

ターゲット・データベースが統合ReplicatをサポートしないOracleバージョンの場合やOracle以外のデータベースの場合は、調整または並列Replicat構成を使用できます。

Replicat構成の前提条件

この項では、Replicatを構成するためのベスト・プラクティスを示しています。

Replicatを構成する前に従うガイドラインは次のとおりです。

  1. Oracle GoldenGateのためのデータベースの準備

  2. Oracle GoldenGate資格証明の確立

  3. 様々なReplicatモードからの選択

  4. Managerプロセスを構成して、ターゲット・システムにOracle GoldenGateインスタンスを作成します。

「Replicat構成の前提条件」を参照してください。

双方向レプリケーションの場合のアクティブ/アクティブ・レプリケーション・プロセスの使用について学習するには、双方向レプリケーションのクイックスタートも参照してください。

チェックポイント表について

チェックポイント表はReplicatの必須コンポーネントです。

Replicatは、リカバリ・チェックポイントをチェックポイント表に保持し、ターゲット・データベースに格納されます。チェックポイントは、Replicatトランザクション内でチェックポイント表に書き込まれます。チェックポイントはトランザクションに対して成功または失敗のいずれかであるため、プロセスまたはデータベースで障害が発生した場合でも、トランザクションは一度のみ適用されることがReplicatにより保証されます。マイクロサービスWebインタフェースからチェックポイント表を作成する方法を学習するには、Oracle GoldenGate MicroservicesドキュメントReplicatの追加前を参照してください。

ノート:

チェックポイント表の使用をお薦めします。複数のクラシックまたは調整Replicatが同じチェックポイント表を共有できますが、そのようにすると最適なパフォーマンスが得られなくなる可能性があります。大容量環境では、複数のチェックポイント表が異なるドライブに存在しないようにして、チェックポイント表が競合ポイントにならないようにする必要があります。

詳細は、「Oracle GoldenGateレプリケーションのインスタンス化」を参照してください。

GLOBALSファイルへのチェックポイント表の組込み

Oracle GoldenGate構成でチェックポイント表を指定する手順:

  1. GLOBALSファイルを作成します(あるいは、既存のものを編集します)。
    EDIT PARAMS ./GLOBALS

    ノート:

    EDIT PARAMSで、単純なテキスト・ファイルが作成されます。EDIT PARAMS後にファイルを保存すると、拡張子なしのGLOBALS(大文字)という名前で保存されます。これはそのままにし、ファイルはOracle GoldenGateルートディレクトリのままにします。

  2. GLOBALSファイルで、CHECKPOINTTABLEパラメータを入力します。
    CHECKPOINTTABLE [container.]schema.table
    
  3. GLOBALSファイルを保存し、閉じます。

チェックポイント表へのデフォルトの非同期COMMITの無効化

非統合Replicatがチェックポイント表を使用する際、NOWAITオプションを指定して非同期のCOMMITを使用し、パフォーマンスを向上させます。ReplicatはこのCOMMITの適用直後に処理を続行できます。データベースでのトランザクションの記録はバックグラウンドで行われます。Replicatパラメータ・ファイルにDBOPTIONSパラメータとDISABLECOMMITNOWAITオプションを使用すると、NOWAITを指定した非同期のCOMMITを無効にできます。

ノート:

非統合Replicatグループの構成にチェックポイント表が含まれない場合、チェックポイントはディスク上のファイルに保持されます。この場合、ReplicatはWAITを指定してCOMMITを使用し、データベースの障害が発生した場合に、チェックポイント・ファイルで指定されたトランザクションの状態がリカバリ後に異なるような矛盾が生じないようにします。

チェックポイント保持の制御

TRANLOGOPTIONSパラメータのCHECKPOINTRETENTIONTIMEオプションでは、Extractがチェックポイントを自動的にパージするまで保持する日数を制御します。

部分的な日数は、10進値を使用して指定されます。たとえば、8.25は8日と6時間を指定します。デフォルトは7日です。

Replicatの構成

プラガブル・データベース(PDB)にReplicatを構成するためにReplicatプロセスを構成します。Replicatは、Oracleマルチテナント・コンテナ・データベース内の使用可能な任意のモードで動作できます。

コマンドライン・インタフェースからReplicatを追加するには、GGSCIからのADD REPLICATの実行を参照してください。

次のステップを使用して、様々なReplicatモードのパラメータを構成します。

  1. ターゲット・システムで、GGSCIコマンドライン・インタフェースを使用してReplicatパラメータ・ファイルを作成します。
    EDIT PARAMS name

    説明: nameは、Replicatグループの名前です。

  2. 次に示す順序でReplicatパラメータを入力します。パラメータ文ごとに新しい行を開始します。

    非統合モードのReplicatグループの基本的なパラメータ:

    REPLICAT repe
    USERIDALIAS ggeast
    ASSUMETARGETDEFS
    MAP hr.*, TARGET hr2.*;
    

    統合ReplicatモードのReplicatグループの基本的なパラメータ:

    REPLICAT repw
    DBOPTIONS INTEGRATEDPARAMS(parallelism 6)
    USERIDALIAS ggwest
    ASSUMETARGETDEFS
    MAP hr.*, TARGET hr2.*;
    
    パラメータ 説明
    REPLICAT group

    groupは、Replicatグループの名前です。

    DBOPTIONS DEFERREFCONST

    非統合モードのReplicatに適用されます。DEFERREFCONSTでは、ターゲット・データベースによるカスケード制約の適用をReplicatトランザクションのコミットまで遅延させるDEFERRABLEに制約を設定します。その他の重要な情報については、DBOPTIONSを参照してください。

    DBOPTIONS INTEGRATEDPARAMS (parameter[, ...])

    このパラメータ指定は、統合モードのReplicatに適用されます。インバウンド・サーバーのオプション・パラメータを指定します。

    DBOPTIONSオプションのその他の重要情報は、「統合モード用のオプションのパラメータ」を参照してください。

    USERIDALIAS alias

    Replicatに割り当てられているユーザーのデータベース・ログイン資格証明のエイリアスを指定します。この資格証明は、Oracle GoldenGate資格証明ストアに存在する必要があります。詳細は、「Oracle GoldenGate資格証明の確立」を参照してください

    MAP [container.]schema.object, TARGET schema.object;

    ソース表または順序、複数オブジェクト、および対応するターゲットオブジェクトの関係を指定します。

    • MAPは、ソース表または順序、またはオブジェクトのワイルドカード・セットを指定します。

    • TARGETは、ターゲット表または順序、またはオブジェクトのワイルドカード・セットを指定します。

    • containerは、コンテナの名前です(ソース・データベースがマルチテナント・コンテナ・データベースの場合)。

    • schemaは、スキーマ名またはスキーマのワイルドカード・セットです。

    • objectは、表または順序の名前、またはオブジェクトのワイルドカード・セットです。

    このパラメータ文はセミコロンで終了します。

    ワイルドカード指定からオブジェクトを除外するには、MAPEXCLUDEパラメータを使用します。

    データのフィルタリング、マッピングおよび操作を制御するその他のオプションとその詳細は、『Oracle GoldenGateリファレンス』MAPに関する項を参照してください。

    並列ReplicatモードのReplicatグループの基本的なパラメータ:

    REPLICAT repe
    USERID ggadmin, PASSWORD ***
    MAP_PARALLELISM 3
    MIN_APPLY_PARALLELISM 2
    MAX_APPLY_PARALLELISM 10
    SPLIT_TRANS_RECS 60000
    MAP *.*, TARGET *.*;
    パラメータ 説明
    MAP_PARALLELISM

    マッパーの数を構成します。これは証跡ファイルを読み取るために使用されるスレッドの数を制御します。最小値は1、最大値は100、デフォルトは2です。

    APPLY_PARALLELISM

    アプライアの数を構成します。これは変更を適用するために使用されるターゲット・データベースの接続の数を制御します。デフォルト値は4です。

    MIN_APPLY_PARALLELISM

    MAX_APPLY_PARALLELISM

    並列化の適用が自動チューニングされます。最小値と最大値を設定して、Replicatが並列化を自動的に調整する範囲を定義できます。デフォルト値はありません。APPLY_PARALLELISMと同時に使用しないでください

    SPLIT_TRANS_REC

    大きなトランザクションを指定のサイズのピースに分割して、パラレルに適用するように指定します。ピース間の依存関係は保持されます。デフォルトでは無効になっています。

    COMMIT_SERIALIZATION

    FULL直列化モードのコミットを有効にし、証跡の順序でトランザクションを強制的にコミットします。

    拡張パラメータ

     
    LOOK_AHEAD_TRANSACTIONS

    トランザクションをバッチ化するときに、スケジューラがどの程度先まで対象にするかを制御します。デフォルト値は10000です。

    CHUNK_SIZE

    並列Replicatで、どの程度の大きさのトランザクションを大きいトランザクションとみなすかを制御します。並列Replicatは、このサイズより大きいトランザクションを検出すると、そのトランザクションをシリアライズするためにパフォーマンスが低下します。ただし、この値を大きくすると、並列Replicatによって消費されるメモリーも増加します。

  3. 統合Replicatまたは並列Replicatを統合モードで使用している場合は、Extractのパラメータ・ファイルに次のパラメータを追加します。
    • LOGALLSUPCOLS: このパラメータでは、変更前イメージの補足的にログに記録される列をキャプチャします。これはデフォルト・パラメータであり、オフまたは無効にしないでください。これはOracle GoldenGateでサポートされるすべてのソース・データベースで有効です。12cより前のExtractバージョンでは、GETUPDATEBEFORESおよびNOCOMPRESSDELETESパラメータを使用して、同じ要件を満たすことができます。主キー、一意キーおよび外部キーの変更前および変更後の値をログに記録するようにデータベースを構成する必要があります。

    • COMPACTに設定されるUPDATERECORDFORMATパラメータ: この設定では、ExtractでUPDATE操作の変更前および変更後のイメージを証跡の単一レコードに結合します。これはデフォルトのオプションであり、デフォルトの設定を変更しないことをお薦めします。

  4. 構成に推奨されるオプションのReplicatパラメータを入力します。このファイルは、EDIT PARAMSコマンドを使用して処理を開始する前にいつでも編集できます。構成のその他の考慮事項は、統合モード用のオプションのパラメータを参照してください。
  5. ファイルを保存して閉じます。

非統合Replicatを使用するための追加の構成ステップ

この章では、非統合モードで動作する場合のReplicat専用の手順について説明します。Replicatが非統合モードで動作する場合、トリガー、カスケード制約および一意の識別子を、Oracle GoldenGate環境で適切に構成する必要があります。

この章は、Oracle GoldenGate Replicatの構成に記載されている基本的な構成要件を補足するものです。

内容は次のとおりです。

ターゲット表でのトリガーと参照カスケード制約の無効化

Replicatが非統合モードの場合、トリガーとカスケード制約をOracleターゲット表で無効にする必要があります。

Oracle GoldenGateには、Oracleバージョンに応じてトリガーまたはカスケード制約を自動的に処理するオプションがいくつか用意されています。

  • Oracle 11.2.0.2以降の11gR2の各バージョンの場合、Replicatは、セッション中、トリガーによって行われる処理を無効にします。トリガーは無効になりませんが、かわりに、トリガー本体が実行されなくなります。ただし、トリガーのWHEN部分はコンパイルして実行し、データベース・エラーが起きないようにする必要があります。トリガーの起動を有効にするには、または手動で無効にするには、DBOPTIONSNOSUPPRESSTRIGGERSオプションを使用して、USERIDALIASパラメータの後に文を配置します。特定のトリガーの起動を許可するには、次のデータベース・プロシージャを使用します。trigger_ownerはトリガーの所有者で、trigger_nameはトリガーの名前です。特定のトリガーに対してプロシージャがFALSEでコールされると、そのプロシージャがTRUEでコールされるまで設定されたままになります。

  • dbms_ddl.set_trigger_firing_property(trigger_owner "trigger_name", FALSE)
    
  • Oracle 11.2.0.2以降の11gR2の各バージョンの場合、DEFERREFCONSTオプションを指定してDBOPTIONSパラメータを使用し、Replicatトランザクションがコミットされるまで、カスケード更新およびカスケード削除の制約のチェックおよび強制を延期できます。

  • 他のOracleのバージョンの場合、トリガーと整合性制約を無効にするか、それらを手動で変更して、Replicatデータベース・ユーザーを無視します。

Oracle GoldenGateでは、トリガーまたはカスケード制約の発生によって生じたDMLがレプリケートされるため、Replicatが非統合モードの場合は制約を無効にする必要があります。同じトリガーや制約がターゲット表でアクティブになった場合、レプリケートされたバージョンのために重複となり、データベースでエラーが返されます。ソース表にemp_srcsalary_src、ターゲット表にemp_targsalary_targを使用している次の例について考えます。

  1. emp_srcに対して削除が発行されます。

  2. それによって、削除がsalary_srcにカスケードされます。

  3. Oracle GoldenGateが、両方の削除をターゲットに送信します。

  4. まず親削除が到着し、emp_targに適用されます。

  5. 親削除によって、削除がsalary_targにカスケードされます。

  6. salary_srcのカスケードされた削除が、salary_targに適用されます。

  7. 行は、すでにステップ5で削除されているため、見つかりません。

ターゲット表での制約チェックの延期

Replicatが非統合モードの場合、ターゲットで制約チェックを延期する必要がある場合があります。

制約を遅延するには、次のステップを実行します。

  1. ソースで制約がDEFERRABLEである場合、ターゲットの制約もDEFERRABLEにする必要があります。次のパラメータ文のいずれかを使用して、Replicatのトランザクションがコミットされるまで制約チェックを延期できます。
    • Replicatセッション全体で制約を延期するには、Replicatパラメータ・ファイルのルート・レベルでSQLEXECを使用します。

      SQLEXEC ("alter session set constraint deferred")

    • DEFERREFCONSTオプションを指定してReplicatパラメータDBOPTIONSを使用し、各Replicatトランザクションに対する制約チェックを遅延させます。

  2. 一時的な主キーの重複によって生じた整合性エラーに対応するようにReplicatを構成する必要がある場合があります。一時的な主キーの重複は、トランザクションの実行中に一時的に生じ、トランザクションのコミット時に解決する重複です。この種の操作では、通常、SET x = x+n式または新しい値が既存の値と等しくなるように値を変更するその他の操作を使用します。

    次に、制約が延期されない場合に一時的な主キーの重複が発生する可能性がある一連の値変更を示します。例では、主キー列はCODEであり、現在のキー値(更新前)は1、2および3です。

    update item set code = 2 where code = 1;
    update item set code = 3 where code = 2;
    update item set code = 4 where code = 3;
    

この例では、キー値2がすでに表に存在するため、Replicatによって最初の更新がターゲットに適用されると、ORA-00001(一意制約)エラーになります。Replicatトランザクションによって制約違反エラーが返されます。デフォルトでは、Replicatによってそれらの違反および異常終了は処理されません。

11.2.0.4以降のバージョンでの一時的な主キーの重複の処理

11.2.0.4より後のバージョンの場合、非統合Replicatは、デフォルトではOracle Workspace Managerの作業領域を使用して一時的な主キーの重複を自動的に解決しようとします。この構成では、Replicatは、コミット時まで制約チェックを延期します。制約は、明示的に延期可能として定義されている必要はありません。

一時的な主キーの重複の自動処理の要件は、次のとおりです。

  • Replicatデータベース・ユーザーに次のOracle関数へのアクセス権を付与します。

    DBMS_XSTREAM_GG.ENABLE_TDUP_WORKSPACE()
  • ターゲット表は延期可能な制約を持つことはできません。延期可能な制約がある場合、Replicatはエラーを返し、異常終了します。

延期可能な制約を持つ表を処理するには、制約がDEFERRABLE INITIALLY IMMEDIATEであることを確認し、その表をマップするMAP文でHANDLETPKUPDATEパラメータを使用します。HANDLETPKUPDATEパラメータでは、デフォルトである重複の自動処理がオーバーライドされます。作業領域の使用によって、次のOracle GoldenGateのエラー処理パラメータが影響を受けます。

  • HANDLECOLLISIONS

  • REPERROR

ReplicatによってOracle Workspace Managerの作業領域が有効になると、HANDLECOLLISIONSREPERRORなどのOracle GoldenGateパラメータで指定されたエラー処理が無視されます。かわりに、グループ化されたトランザクション(BATCHSQLが有効な場合)がReplicatによって異常終了され、アクティブな作業領域を使用して通常のモードで更新が再試行されます。再度ORA-00001が発生する場合、Replicatでトランザクションがロールバックされ、有効なエラー処理ルールを使用してトランザクションが再試行されます。

ノート:

非更新レコードに対してORA-00001が発生する場合、HANDLECOLLISIONSREPERRORなどのエラー処理のパラメータによってエラーが処理されます。

一時的な主キーの重複を含む操作に、LOBやXMLTypeなどの行外列の更新も含まれる場合、作業領域は使用できません。したがって、そのようなケースはサポートされず、ターゲットで未検出のデータの破損が発生する可能性があります。この例は、次のとおりです。

update T set PK = PK + 1, C_LOB = 'ABC'; 

Replicatトランザクションの除外

双方向構成では、トランザクションをマークするようにReplicatを構成する必要があり、また、Replicatトランザクションを除外するようにExtractを構成して、ソースに伝播されないようにする必要があります。

これを実行するには、次の2つの方法があります。

方法1

OracleからOracleの実装にのみ有効です。

Replicatは、統合モードと非統合モードのどちらであってもかまいません。次のパラメータを使用します。

  • Replicatのパラメータ・ファイルで、DBOPTIONSSETTAGオプションとともに使用します。インバウンド・サーバーは、指定した値のタグ(これらのトランザクションをREDOストリーム内で識別)をそのReplicatのトランザクションに付けます。SETTAGのデフォルト値は00です。

  • Extractのパラメータ・ファイルで、TRANLOGOPTIONSパラメータをEXCLUDETAGオプションとともに使用します。Extractに関連付けられたログマイニング・サーバーは、SETTAG値のタグが付いたREDOを除外します。複数のEXCLUDETAG文を使用して、必要に応じて異なるタグ値を除外できます。

    OracleからOracleの場合は、これが推奨される方法です。

方法2

あらゆる実装(Oracleまたは異種データベース構成)に有効です。

また、ExtractのTRANLOGOPTIONSパラメータにEXCLUDEUSERまたはEXCLUDEUSERIDオプションを使用して、ユーザー名またはIDに基づいてReplicatのDDLとDMLのトランザクションを無視することもできます。複数のEXCLUDEUSER文を使用できます。指定されたユーザーは、GETREPLICATESまたはIGNOREREPLICATESパラメータのルールの対象になります。

詳細は、『Oracle GoldenGateリファレンス』を参照してください。