処理のための表の準備
次の項に示す表属性はOracle GoldenGate環境で処理する必要があります。
ターゲットのIDENTITY列、トリガーおよび制約に対する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にシード値を設定します。
ソース表とターゲット表での行の一意性の確保
Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表にある形式の一意の行識別子が必要です。
TABLE
またはMAP
文でKEYCOLS
句が使用されないかぎり、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を参照してください。