処理のための表の準備
次の表属性は、TeradataのOracle GoldenGate環境で処理する必要があります。
トリガーおよびカスケード制約の無効化
Oracle GoldenGateが、トリガーまたはカスケード制約によって発生するDMLをソースからレプリケートする場合は、ターゲットTeradata表で、トリガー、カスケード削除制約およびカスケード更新制約を無効にします。同じトリガーまたは制約がターゲット表でアクティブになっている場合、レプリケートされるソース・データのために重複となり、データベースでエラーが返されます。ソース表にemp_src
とsalary_src
、ターゲット表にemp_targ
とsalary_targ
を使用している次の例について考えます。
emp_src
に削除が発行されます。- それによって、削除が
salary_src
にカスケードされます。 - Oracle GoldenGateが、両方の削除をターゲットに送信します。
- 親削除が最初に到達し、
emp_targ
に適用されます。 - 親削除によって、削除が
salary_targ
にカスケードされます。 salary_src
のカスケードされた削除が、salary_targ
に適用されます- 行は、すでにステップ5で削除されているため、見つかりません。
表における行の一意性の保証
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を参照してください。
KEYCOLSを使用したカスタム・キーの指定
該当するキーが表にない場合、あるいは識別子を使用しない場合、表に常に一意の値を含んだ列があれば、代替キーを定義できます。ExtractのTABLE
パラメータおよびReplicatのMAP
パラメータ内にKEYCOLS
句を含めることで、この代替キーを定義します。指定されたキーは、Oracle GoldenGateが検出する既存の主キーまたは一意キーを上書きします。
大量の更新操作および削除操作の処理
大量の行数を更新または削除する操作によって、サブスクライバ・データベースの行ごとに個別の更新および削除が生成されます。これによって、Teradataのサブスクライバ・システムでロック・マネージャのオーバーフローが発生し、その結果、Replicatプロセスが終了する可能性があります。
これらのエラーを回避するには、操作のレプリケーションを一時停止してから、ソース・システムおよびターゲット・システムでそれらの操作を手動で実行します。レプリケーションを一時停止するには、そのセッションにのみレプリケーションを一時停止する次のコマンドを使用します。その表の他のセッションの操作は正常にレプリケートされます。
set session override replication on;
commit;