処理のための表の準備

次の項に示す表属性はOracle GoldenGate環境で処理する必要があります。

ターゲットのIDENTITY列、トリガーおよび制約に対するReplicatの考慮事項

IDENTITY列、トリガー、カスケード制約およびチェック制約があるターゲットSQL Serverデータベースにデータをレプリケートする場合は、次の点を考慮してください。

  • 列にIDENTITY列が含まれる場合、Replicatにより表のIDENTITY_INSERT ONが設定されます。これにより、配信パフォーマンスが低下する可能性があります。

  • トリガーまたはカスケード制約が含まれる表について、トリガーによって挿入されるデータやカスケード制約によって更新または削除されるデータと同じデータを配信するようにReplicatが構成されている場合は、トリガーまたはカスケード操作を実行するとReplicatエラーが発生する可能性があります。

    たとえば、ソースのTableAには、レコードをTableBに挿入するトリガーが含まれます。Extractは、TableATableBの両方のレコードを取得するように構成されています。ターゲットでは、Replicatにより、最初にTableAのレコードが挿入され、次に、TableAのトリガーが起動してTableBに挿入された後、Replicatによって同じレコードのTableBへの挿入が試行される結果、Replicatエラーが発生します。

  • すべての外部キーのチェック制約も強制されるため、配信パフォーマンスが低下する可能性があります。

  • トリガーがあるターゲット・データベース上の表には、SET XACT_ABORTパラメータをオフに設定します。これにより、トリガー操作の実行によるトランザクションの欠落がなくなります。

このような状況に対処するために、レプリケーションのユースケースに基づいて実装できるいくつかのオプションがあります。

  • Replicatがターゲット表にデータを書き込む唯一のプロセスである一方向の実装では、ターゲット表のIDENTITY列、トリガーおよび制約について次のオプションを検討します。

    • ターゲット表のIDENTITYプロパティ、トリガーおよび制約を無効化または削除します。

    • IDENTITYプロパティ、トリガーおよび制約を変更し、それぞれに対してNOT FOR REPLICATIONオプションをオンに設定して、Microsoft ODBCドライバが少なくともバージョン17.8.1であることを確認します。

  • Replicatとアプリケーションの両方でターゲット表にデータが書き込まれ、トリガーと制約が有効になっている複数方向の実装では、IDENTITYプロパティ、トリガーおよび制約を変更し、それぞれに対してNOT FOR REPLICATIONオプションをオンに設定して、Microsoft ODBCドライバが少なくともバージョン17.8.1であることを確認します。

    また、複数方向レプリケーション構成でIDENTITY列を使用するには、それぞれに異なるシード値を持ち、構成内のサーバーの数と等しい増分値を持つようにIDENTITY列を定義します。

    たとえば、3つのデータベース構成は次のようになります。

    Database1は、増分値3で、0にシード値を設定します。

    Database2は、増分値3で、1にシード値を設定します。

    Database3は、増分値3で、2にシード値を設定します。

配列処理を使用したIDENTITYレプリケーションの改善

セッションごとに1つの表しかIDENTITY_INSERTONに設定できないため、セッション内の複数の表にIDENTITYデータを適用するときは、ReplicatがIDENTITY_INSERTの切替えを続ける必要があります。このような状況で、Replicatのパフォーマンスを改善するには、BATCHSQLパラメータを使用します。BATCHSQLを使用すると、Replicatは、一度に1つずつSQL文を適用するかわりに配列処理を使用します。

ソース表とターゲット表での行の一意性の確保

Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表にある形式の一意の行識別子が必要です。

TABLEまたはMAP文でKEYCOLS句が使用されないかぎり、Oracle GoldenGateは、使用する行識別子を次の優先順位に従って選択します。

  1. 主キー

  2. タイムスタンプまたはマテリアライズされていない計算結果列を含まない英数字順で最初の一意キー。

  3. 前述のキー・タイプのいずれも存在しない場合(その他の種類のキーが表に定義されている場合でも)、Oracle GoldenGateは、データベースで一意キーでの使用を許可されているすべての列(キー内での使用がOracle GoldenGateでサポートされていない列やOracle GoldenGate構成から除外されている列は除く)で疑似キーを作成します。

    ノート:

    表に使用可能な他のキーがない場合や、表にキーがまったくない場合、Oracle GoldenGateは該当するメッセージをレポート・ファイルに記録します。すべての列からキーを作成すると、ソース・システムのOracle GoldenGateのパフォーマンスが低下します。ターゲットでは、このキーはReplicatであまり効率的でないより大きいWHERE句が使用される原因となります。

  4. 表に適切なキーがない場合、あるいは既存のキーを使用しない場合は、表に一意の値が常に含まれる列があれば、代替キーを定義できます。ExtractのTABLEパラメータおよびReplicatのMAPパラメータ内にKEYCOLS句を含めることで、この代替キーを定義します。指定したキーにより、Oracle GoldenGateで検出される既存の主キーまたは一意キーはオーバーライドされます。Oracle GoldenGateリファレンスTABLE | MAPを参照してください。

KEYCOLSを使用したカスタム・キーの指定

該当するキーが表にない場合、あるいは識別子を使用しない場合、表に常に一意の値を含んだ列があれば、代替キーを定義できます。ExtractのTABLEパラメータおよびReplicatのMAPパラメータ内にKEYCOLS句を含めることで、この代替キーを定義します。指定されたキーは、Oracle GoldenGateが検出する既存の主キーまたは一意キーを上書きします。