処理のための表の準備

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

トリガーおよびカスケード制約の無効化

Oracle GoldenGateが、トリガーまたはカスケード制約によって発生するDMLをソースからレプリケートする場合は、ターゲットTeradata表で、トリガー、カスケード削除制約およびカスケード更新制約を無効にします。同じトリガーまたは制約がターゲット表でアクティブになっている場合、レプリケートされるソース・データのために重複となり、データベースでエラーが返されます。次の例を考えてみます。この例では、ソース表はemp_srcおよびsalary_src、ターゲット表はemp_targおよびsalary_targです。

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

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

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

  4. 親削除が最初に到達し、emp_targに適用されます。

  5. 親削除は、削除をsalary_targにカスケードします。

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

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

表における行の一意性の保証

Oracle GoldenGateでは、レプリケートされた更新および削除に対応する正しいターゲット行を検出するために、ソース表およびターゲット表でなんらかの形式の一意の行識別子が必要です。

TABLE文またはMAP文にKEYCOLS句が使用されている場合を除き、Oracle GoldenGateでは、次の優先順位に従って使用する行識別子が選択されています。主キー

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

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

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

  1. 表に適切なキーがない場合、あるいは既存のキーを使用しない場合は、表に一意の値が常に含まれる列があれば、代替キーを定義できます。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;