処理のための表の準備
次の項に示す表属性はOracle GoldenGate環境で処理する必要があります。
ターゲットのIDアイデンティティ列、トリガーおよび制約に対するReplicatの考慮事項
IDENTITY列、トリガー、カスケード制約およびチェック制約があるターゲットSQL Serverデータベースにデータをレプリケートする場合は、次の点を考慮してください。
-
列にIDENTITY列が含まれる場合、Replicatにより表の
IDENTITY_INSERT ONが設定されます。これにより、配信パフォーマンスが低下する可能性があります。 -
トリガーまたはカスケード制約が含まれる表について、トリガーによって挿入されるデータやカスケード制約によって更新または削除されるデータと同じデータを配信するようにReplicatが構成されている場合は、トリガーまたはカスケード操作を実行するとReplicatエラーが発生する可能性があります。
たとえば、ソースに対する
TableAには、レコードをTableBに挿入するトリガーがあります。Extractは、TableAとTableBの両方のレコードを取得するように構成されています。ターゲットでは、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_INSERTをONに設定できないため、セッション内の複数の表にIDENTITYデータを適用するときは、ReplicatがIDENTITY_INSERTの切替えを続ける必要があります。このような状況で、Replicatのパフォーマンスを改善するには、BATCHSQLパラメータを使用します。BATCHSQLを使用すると、Replicatは、一度に1つずつSQL文を適用するかわりに配列処理を使用します。
ソース表とターゲット表の行の一意性の保証
Oracle GoldenGateでは、レプリケートされた更新および削除に対応する正しいターゲット行を検出するために、ソース表およびターゲット表でいくつかの一意の行識別子が必要です。
KEYCOLS句がTABLE文またはMAP文内で使用されていない場合、Oracle GoldenGateは、使用する行識別子を次の優先順位で選択します。
-
主キー
-
タイムスタンプまたはマテリアライズされていない計算結果列を含まない英数字順に最初の一意キー。
-
前述のキー・タイプのいずれも存在しない場合(その他の種類のキーが表に定義されている場合でも)、Oracle GoldenGateは、すべての列で疑似キーを作成しますキーでOracle GoldenGateでサポートされていないもの、またはOracle GoldenGate構成から除外されているものを除き、一意のキーでデータベースを使用できること。ノート:表に使用できるその他のキーがない場合や、表にキーがまったくない場合、Oracle GoldenGateは該当するメッセージをレポート・ファイルに記録します。すべての列からキーを構築すると、ソース・システム上のOracle GoldenGateのパフォーマンスが妨げられます。ターゲットでは、このキーによってReplicatは、より大きく、非効率な
WHERE句を使用します。
- 表に適切なキーがない場合、または既存のキーを使用しない場合は、表に一意の値が常に含まれる列があれば、代替キーを定義できます。この代替キーは、Extractの
TABLEパラメータおよびReplicatのMAPパラメータ内にKEYCOLS句を含めることで定義します。指定されたキーが、Oracle GoldenGateにより検出される既存の主キーまたは一意キーよりも優先されます。Oracle GoldenGateリファレンスのTABLE | MAPを参照してください。
KEYCOLSを使用したカスタム・キーの指定
該当するキーが表にない場合、あるいは識別子を使用しない場合、表に常に一意の値を含んだ列があれば、代替キーを定義できます。この代替キーは、ExtractのTABLEパラメータおよびReplicatのMAPパラメータ内にKEYCOLS句を含めることで定義します。指定されたキーは、Oracle GoldenGateが検出する既存の主キーまたは一意キーを上書きします。