列グループ

列グループは、レプリケート表の1つ以上の列を論理的にグループ化したものです。列グループを追加すると、表内の他の列とは別個に、その列グループの列に対して競合検出および解消が実行されます。

ADD_AUTO_CDRプロシージャを使用して、Oracle GoldenGate競合検出および解決のために表を構成するときに、表のすべてのスカラー列がデフォルト列グループに追加されます。表のその他の列グループを定義するには、ADD_AUTO_CDR_COLUMN_GROUPプロシージャを実行します。ユーザー定義の列グループに属さない表の列は、表のデフォルト列グループに残ります。

列グループを使用すると、異なるデータベースで同じ行の異なる列をほぼ同時に更新しても、競合が発生しません。表の列グループが構成されている場合、異なるデータベースで表の同じ列を更新する場合でも競合を回避できます。更新により、異なる列グループの列値が変更された場合、競合は検出されません。

この例は、データベースAおよびデータベースBでレプリケートされている行を示しています。各データベースのレプリケートされた表には、次の2つの列グループが構成されています。

  • 1つの列グループにはOffice列が含まれます。この列グループの非表示のタイムスタンプ列はTS1です。

  • もう1つの列グループにはTitleおよびSalary列が含まれます。この列グループの非表示のタイムスタンプ列はTS2です。

これらの列グループを使用すると、データベースAおよびデータベースBで同じ行をほぼ同時に更新しても競合は発生しません。具体的には次のように変更されます。

  • データベースAで、Officeの値が1080から1030に変更されました。

  • データベースBで、Titleの値がMTS1からMTS2に変更されました。

Office列とTitle列は異なる列グループに属するため、変更をレプリケートしても競合は検出されません。その結果、それぞれの変更がレプリケートされた後は、行の値が両方のデータベースで同じになります。

ピース単位のLOB更新

LOB WRITELOB ERASEおよびLOB TRIMからなるLOB操作のセットは、ピース単位のLOB更新です。LOB列を含む表に対して競合検出および解決が構成されている場合、各LOB列は独自の列グループに配置され、列グループは独自の非表示のタイムスタンプを持ちます。タイムスタンプ列は、最初のピース単位のLOB操作時に更新されます。

LOB列の場合、次のように競合が検出されて解決されます。

  • LOBの列グループのタイムスタンプが、行の対応するLOB列グループより遅い場合、ピース単位のLOB更新が適用されます。

  • LOBの列グループのタイムスタンプが、行の対応するLOB列グループより早い場合、表の行のLOBが保持されます。

  • 行が表に存在しない場合は、エラーが発生します。