16 自動競合検出および解決

Oracle GoldenGateを構成して、異なるサイトで同時に同じデータが更新されるときに発生する競合を自動的に検出して解決できます。

内容は次のとおりです。

自動競合検出および解決について

Oracle GoldenGateによってOracle Database間の変更をレプリケートする場合、これらのデータベースで、Oracle GoldenGate自動競合検出および解決を構成して管理できます。そのためには、ソース・データベースとターゲット・データベースでPL/SQLコールが実行されたことを確認する必要があります。

この機能は双方向レプリケーションで使用することを想定しています。

注意:

この章では、Oracle GoldenGate 12c (12.3.0.1)およびOracle Database 12cリリース2 (12.2)以降に固有の自動競合検出および解決機能について取り上げています。これはOracle Databaseで構成します。また、競合検出および解決のための一般的なOracle GoldenGate機能もあり、これはOracle GoldenGate競合検出および解決(CDR)と呼ばれます。Oracle GoldenGate CDRはReplicatパラメータ・ファイルで構成します。

1つの表に対して構成できるのは、次のタイプの自動競合検出および解決のうち1つのみです。

  • Oracle Database 12cリリース2 (12.2)固有の自動競合検出および解決機能

  • Oracle GoldenGate CDR

自動競合検出および解決

Oracle Database間で表をレプリケートするOracle GoldenGate構成によって、自動競合検出および解決を構成できます。表に対して競合検出および解決を構成するには、DBMS_GOLDENGATE_ADMパッケージのADD_AUTO_CDRプロシージャをコールします。

Oracle GoldenGateが、Oracle Databaseが発生元である変更を取得するときに、各変更が行の論理変更レコード(LCR)にカプセル化されます。行LCRはDML行変更の構造化表現です。それぞれの行LCRに操作タイプ、古い列値および新しい列値が含まれます。複数の行LCRを単一のデータベース・トランザクションに含めることができます。

表の複数のレプリカで、表に対する変更が許可される場合に、異なる2つのデータベースの同じ行にほぼ同時に変更が加えられると、競合が発生することがあります。Oracle GoldenGateは行のLCRを使用して変更をレプリケートします。競合を検出するために、発生元データベースでの初期変更の行LCRに含まれる古い値を、宛先データベースの対応する表の行の現在の値(キー列で識別される)と比較します。一致しない列値がある場合は、競合が存在します。

競合を検出すると、Oracle GoldenGateは競合を解決するために、行の値を行LCRに含まれる値で上書きするか、行LCRの値を無視するか、デルタを計算して行の値を更新します。

次に示す理由で、自動競合検出および解決のためにアプリケーションを変更する必要はありません。

  • Oracle Databaseによって非表示のタイムスタンプ列が自動的に作成されて保持されます。

  • 挿入、更新および削除では、削除ツームストン・ログ表が使用されて行が削除されたか判断されます。

  • LOB列の競合を検出できます。

  • Oracle Databaseによって必要な列に対するサプリメンタル・ロギングが自動的に構成されます。

注意:

自動変更検出および解決が有効になっている表でクラシックReplicatを使用する場合、Extractは「OGG-10461 Failed to retrieve timestamp error」で異常終了することがあります。これは、レコードをツームストン表に挿入する内部トリガーがユーザーDMLでのみ起動するためです。クラシックReplicatはすべてのトリガーの起動を抑制するため、ツームストン表への挿入がなくなります。

サプリメンタル・ロギングは、競合を検出して解決するために必要な情報をそれぞれの行LCRに確実に含めるために必要です。サプリメンタル・ロギングは、表に対してDML操作が実行されたときに、表の行に関するREDOログに追加情報を配置します。Oracle GoldenGate競合検出および解決のために表を構成するときに、表のすべての列に対してサプリメンタル・ロギングが自動的に構成されます。REDOログの追加情報は、表の変更がレプリケートされるときにLCRに配置されます。

関連項目

最新タイムスタンプの競合検出および解決

DBMS_GOLDENGATE_ADMパッケージのADD_AUTO_CDRプロシージャを実行して、Oracle GoldenGate自動競合検出および解決のために表を構成すると、非表示のタイムスタンプ列が表に追加されます。この非表示のタイムスタンプ列によって行変更の時間が記録され、この情報を使用して競合が検出されて解決されます。

行LCRを適用すると、INSERTUPDATEまたはDELETE操作で競合が発生する可能性があります。次の表では、それぞれの競合のタイプと、その解決方法について説明します。

操作 競合検出 競合解決

INSERT

競合が検出されるのは、表のキー列の値が行LCRの新しい値と同じ場合です。

行LCRのタイムスタンプが表の行のタイムスタンプより遅い場合は、行LCRの値で表の値が置き換えられます。

行LCRのタイムスタンプが表の行のタイムスタンプより早い場合は、行LCRが破棄され、表の値が保持されます。

UPDATE

次のそれぞれの場合に競合が検出されます。

  • 行LCRのタイムスタンプ値と、表の対応する行のタイムスタンプ値が一致しない場合。

  • 行LCRの列グループの古い値が、対応する表の行の列値と一致しない場合。列グループは、レプリケートされた表の1つ以上の列の論理グループ化です。

  • 表の行が存在しない場合。行がツームストン表にある場合は、更新/削除競合と呼ばれます。

値が一致せず、行LCRのタイムスタンプが表の行のタイムスタンプより遅い場合は、行LCRの値で表の値が置き換えられます。

値が一致せず、行LCRのタイムスタンプが表の行のタイムスタンプより早い場合は、行LCRが破棄され、表の値が保持されます。

表の行が存在せず、行LCRのタイムスタンプがツームストン表の行のタイムスタンプより遅い場合は、行LCRがUPDATE操作からINSERT操作に変換され、表に挿入されます。

表の行が存在せず、行LCRのタイムスタンプがツームストン表の行のタイムスタンプより早い場合は、行LCRが破棄されます。

表の行が存在せず、対応する行がツームストン表に存在しない場合は、行LCRがUPDATE操作からINSERT操作に変換され、表に挿入されます。

DELETE

次のそれぞれの場合に競合が検出されます。

  • 行LCRのタイムスタンプ値と、表の対応する行のタイムスタンプ値が一致しない場合。

  • 表の行が存在しない場合。

行LCRのタイムスタンプが表のタイムスタンプより遅い場合は、行が表から削除されます。

行LCRのタイムスタンプが表のタイムスタンプより早い場合は、行LCRが破棄され、表の値が保持されます。

削除が成功した場合は、行LCRがツームストン表に挿入されてログに記録されます。

表の行が存在しない場合は、行LCRがツームストン表に挿入されてログに記録されます。

デルタ競合検出および解決

デルタ競合検出では、行LCRの古い列リストの値が表の対応する行の値と異なる場合に、競合が発生します。

表に対してデルタ競合検出および解決を構成するには、DBMS_GOLDENGATE_ADMパッケージのADD_AUTO_CDR_DELTA_RESプロシージャを実行します。デルタ解決方法は、タイムスタンプまたは追加の解決の列には依存しません。デルタ競合解決では、競合を解決するために、行LCRの新しい値と古い値の差が表の値に加算されます。この解決方法は一般に、勘定科目残高などの財務データに使用されます。たとえば、銀行残高が2つのサイトで同時に更新される場合、すべての借方および貸方で収束値が計上されます。

この例は、データベースAおよびデータベースBでレプリケートされている行を示しています。Balance列は、デルタ競合解決の実行対象として指定された列、TS1列は非表示のタイムスタンプ列で、Balance列に対する各変更の時刻を追跡します。両方のデータベースで、行の Balance値にほぼ同時に変更が加えられます(データベースAでは@T20、データベースBでは@T22)。これらの変更により競合が発生するため、デルタ競合解決を使用して次のように競合を解決します。

  • データベースAで、Balance値が100から110に変更されました。したがって、値が10だけ増加しました。

  • データベースBで、Balance値が100から120に変更されました。したがって、値が20だけ増加しました。

  • データベースAで競合を解決するために、行LCRの新しい値と古い値の差が表の値に加算されます。LCRの新しい値と古い値の差は20です(120–100=20)。したがって、表の現在の値(110)が20だけ増加して、競合解決後の値は130になります。

  • データベースBで競合を解決するために、行LCRの新しい値と古い値の差が表の値に加算されます。LCRの新しい値と古い値の差は10です(110–100=10)。したがって、表の現在の値(120)が10だけ増加して、競合解決後の値は130になります。

デルタ競合解決後は、データベースAとデータベースBの行で、Balance列の値が同一になります。

列グループ

列グループは、レプリケートされた表の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が保持されます。

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

自動競合検出および解決の構成

DBMS_GOLDENGATE_ADMパッケージを使用して、Oracle DatabaseでOracle GoldenGate自動競合検出および解決を構成できます。

Replicatパラメータ・ファイルにMAP文を追加し、レプリケートする表およびMAPINVISIBLECOLUMNSパラメータを含める必要があります。

最新タイムスタンプの競合検出および解決の構成

DBMS_GOLDENGATE_ADMパッケージのADD_AUTO_CDRプロシージャを使用して、最新タイムスタンプの競合検出および解決を構成します。ADD_AUTO_CDR_COLUMN_GROUPプロシージャでオプションの列グループを追加します。

最新タイムスタンプの競合検出および解決では、行LCRのタイムスタンプ列が、対応する表の行のタイムスタンプと一致しない場合に、競合が検出されます。タイムスタンプがより遅い場合に行LCRが適用されます。その他の場合は行LCRが破棄され、表の行は変更されません。ADD_AUTO_CDRプロシージャを実行すると、指定した表の各行に非表示のタイムスタンプ列が追加され、タイムスタンプの競合検出および解決が構成されます。ADD_AUTO_CDR_COLUMN_GROUPプロシージャを使用して1つ以上の列グループを追加すると、列グループにタイムスタンプが追加され、列グループに対してタイムスタンプの競合検出および解決が構成されます。
DBMS_GOLDENGATE_ADMパッケージのGRANT_ADMIN_PRIVILEGEプロシージャを使用して、Oracle GoldenGate管理者を構成できます。
  1. Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
  2. ADD_AUTO_CDRプロシージャを実行して表を指定し、最新のタイムスタンプの競合検出および解決を構成します。
  3. オプション: ALTER_AUTO_CDR_COLUMN_GROUPプロシージャを実行して、表に1つ以上の列グループを指定します。
  4. 表をレプリケートする各Oracle Databaseに対して前述の手順を繰り返します。

例16-1 表に対する最新タイムスタンプの競合検出および解決の構成

この例では、hr.employees表に対して、最新タイムスタンプの競合検出および解決を構成します。

BEGIN
  DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR(
    schema_name => 'hr',
    table_name  => 'employees');
END;
/

例16-2 列グループの構成

この例では、hr.employees表に対するタイムスタンプの競合解決のために、次の列グループを構成します。

  • job_identifier_cg列グループには、job_iddepartment_idおよびmanager_id列が含まれます。

  • compensation_cg列グループには、salaryおよびcommission_pct列が含まれます。

BEGIN
  DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_COLUMN_GROUP(
    schema_name       => 'hr',
    table_name        => 'employees',
    column_list       => 'job_id,department_id,manager_id',
    column_group_name => 'job_identifier_cg');
END;
/

BEGIN
  DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_COLUMN_GROUP(
    schema_name       => 'hr',
    table_name        => 'employees',
    column_list       => 'salary,commission_pct',
    column_group_name => 'compensation_cg');
END;
/

デルタ競合検出および解決の構成

DBMS_GOLDENGATE_ADMパッケージのADD_AUTO_CDR_DELTA_RESプロシージャを使用して、デルタ競合検出および解決を構成します。

デルタ競合解決では、競合が検出された列を1つ指定して解決します。行LCRの列の値が表の対応する値と一致しない場合に、競合が検出されます。競合を解決するために、行LCRの新しい値と古い値の差が表の値に加算されます。
DBMS_GOLDENGATE_ADMパッケージのGRANT_ADMIN_PRIVILEGEプロシージャを使用して、Oracle GoldenGate管理者を構成できます。
  1. Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
  2. ADD_AUTO_CDRプロシージャを実行して表を指定し、最新のタイムスタンプの競合検出および解決を構成します。
  3. ADD_AUTO_CDR_DELTA_RESプロシージャを実行して、デルタ競合検出および解決の実行対象の列を指定します。
  4. 表をレプリケートする各Oracle Databaseに対して前述の手順を繰り返します。

例16-3 表に対するデルタ競合検出および解決の構成

この例では、oe.orders表のorder_total列に対して、デルタ競合検出および解決を構成します。

BEGIN
  DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR(
    schema_name => 'oe',
    table_name  => 'orders');
END;
/

BEGIN
  DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_DELTA_RES(
    schema_name => 'oe',
    table_name  => 'orders',
    column_name => 'order_total');
END;
/

自動競合検出および解決の管理

DBMS_GOLDENGATE_ADMパッケージを使用して、Oracle DatabaseでOracle GoldenGate自動競合検出および解決を管理できます。

表に対する競合検出および解決の変更

DBMS_GOLDENGATE_ADMパッケージのALTER_AUTO_CDRプロシージャを使用して、表に対する競合検出および解決を変更します。
Oracle GoldenGate自動競合検出および解決を表に対して構成する必要があります。
  1. Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
  2. ALTER_AUTO_CDRプロシージャを実行して表を指定し、最新のタイムスタンプの競合検出および解決を構成します。
  3. 表をレプリケートする各Oracle Databaseに対して前述のすべての手順を繰り返します。

例16-4 表に対する競合検出および解決の変更

この例では、hr.employees表の競合検出および解決を変更して、ツームストン表で削除の競合を追跡するよう指定しています。

BEGIN
  DBMS_GOLDENGATE_ADM.ALTER_AUTO_CDR(
    schema_name       => 'hr',
    table_name        => 'employees',
    tombstone_deletes => TRUE);
END;
/

列グループの変更

ALTER_AUTO_CDR_COLUMN_GROUPプロシージャにより列グループを変更します。
  1. Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
  2. ALTER_AUTO_CDR_COLUMN_GROUPプロシージャを実行して、表に1つ以上の列グループを指定します。
  3. 表をレプリケートする各Oracle Databaseに対して前述のすべての手順を繰り返します。

例16-5 列グループの変更

この例では、hr.employees表のjob_identifier_cg列グループからmanager_id列を削除します。

BEGIN
  DBMS_GOLDENGATE_ADM.ALTER_AUTO_CDR_COLUMN_GROUP(
    schema_name        => 'hr',
    table_name         => 'employees',
    column_group_name  => 'job_identifier_cg',
    remove_column_list => 'manager_id');
END;
/

注意:

複数の列がある場合はコンマ区切りリスト使用してください。

ツームストン行のパージ

PURGE_TOMBSTONESプロシージャにより、指定の日時より前に記録されたツームストン行を削除します。このプロシージャは、データベースの競合解決が構成されているすべての表のツームストン行を削除します。
時間経過に伴ってツームストン・ログが大きくなりすぎることを防ぐため、場合によってはツームストン行を定期的にパージする必要があります。
  1. Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
  2. PURGE_TOMBSTONESプロシージャを実行して日時を指定します。

例16-6 ツームストン行のパージ

この例では、2015年12月1日の午後3:00時(東部標準時間)より前に記録されたすべてのツームストン行をパージします。TIMESTAMP WITH TIME ZONE形式でタイムスタンプを入力する必要があります。

EXEC DBMS_GOLDENGATE_ADM.PURGE_TOMBSTONES('2015-12-01 15:00:00.000000 EST');

競合検出および解決の表からの削除

DBMS_GOLDENGATE_ADMパッケージのREMOVE_AUTO_CDRプロシージャを使用して、自動競合検出および解決を表から削除します。このプロシージャは、表に対して構成された列グループ、およびデルタ競合検出および解決も削除します。
  1. Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
  2. REMOVE_AUTO_CDRプロシージャを実行して表を指定します。
  3. 表をレプリケートする各Oracle Databaseに対して前述のすべての手順を繰り返します。

例16-7 表の競合検出および解決の削除

この例では、hr.employees表の競合検出および解決を削除します。

BEGIN
  DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR(
    schema_name => 'hr',
    table_name  => 'employees');
END;
/

列グループの削除

REMOVE_AUTO_CDR_COLUMN_GROUPプロシージャにより列グループを削除します。
  1. Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
  2. REMOVE_AUTO_CDR_COLUMN_GROUPプロシージャを列グループの名前を指定して実行します。
  3. 表をレプリケートする各Oracle Databaseに対して前述のすべての手順を繰り返します。

例16-8 列グループの削除

この例では、hr.employees表からcompensation_cg列グループを削除します。

BEGIN
  DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR_COLUMN_GROUP(
    schema_name       => 'hr',
    table_name        => 'employees',
    column_group_name => 'compensation_cg');
END;
/

デルタ競合検出および解決の削除

DBMS_GOLDENGATE_ADMパッケージのREMOVE_AUTO_CDR_DELTA_RESプロシージャを使用して、列に対するデルタ競合検出および解決を削除します。
指定した列に対してデルタ競合検出および解決が構成されている必要があります。
  1. Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
  2. REMOVE_AUTO_CDR_DELTA_RESプロシージャを実行して列を指定します。
  3. 表をレプリケートする各Oracle Databaseに対して前述のすべての手順を繰り返します。

例16-9 表のデルタ競合検出および解決の削除

この例では、oe.orders表のorder_total列のデルタ競合検出および解決を削除します。

BEGIN
  DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR_DELTA_RES(
    schema_name => 'oe',
    table_name  => 'orders',
    column_name => 'order_total');
END;
/

自動競合検出および解決のモニタリング

データ・ディクショナリ・ビューを問い合せて、Oracle DatabaseでOracle GoldenGate自動競合検出および解決をモニターできます。

競合のために構成された表に関する情報の表示

ALL_GG_AUTO_CDR_TABLESビューには、Oracle GoldenGate自動競合検出および解決のために構成された表に関する情報が表示されます。
  1. データベースに接続
  2. ALL_GG_AUTO_CDR_TABLESビューを問い合せます。

例16-10 競合検出および解決のために構成された表に関する情報の表示

この問合せによって、競合検出および解決のために構成された表について次のような情報が表示されます。

  • 各表の所有者

  • 各表の名前

  • 更新/削除競合により削除された行を格納するツームストン表(表に対してツームストン表が構成されている場合)

  • 各表の競合解決に使用される非表示のタイムスタンプ列

COLUMN TABLE_OWNER FORMAT A15
COLUMN TABLE_NAME FORMAT A15
COLUMN TOMBSTONE_TABLE FORMAT A15
COLUMN ROW_RESOLUTION_COLUMN FORMAT A25

SELECT TABLE_OWNER,
       TABLE_NAME, 
       TOMBSTONE_TABLE,
       ROW_RESOLUTION_COLUMN 
  FROM ALL_GG_AUTO_CDR_TABLES
  ORDER BY TABLE_OWNER, TABLE_NAME;

出力結果は次のようになります。

TABLE_OWNER     TABLE_NAME      TOMBSTONE_TABLE ROW_RESOLUTION_COLUMN
--------------- --------------- --------------- -------------------------
HR              EMPLOYEES       DT$_EMPLOYEES   CDRTS$ROW
OE              ORDERS          DT$_ORDERS      CDRTS$ROW

競合解決列に関する情報の表示

ALL_GG_AUTO_CDR_COLUMNSビューには、Oracle GoldenGate自動競合検出および解決のために構成された列に関する情報が表示されます。
列は、行または列の自動競合検出および解決のために構成できます。列は、列グループの最新のタイムスタンプの競合解決のために構成できます。さらに、列はデルタ競合解決のために構成できます。
  1. Oracle GoldenGate管理者としてデータベースに接続します。
  2. ALL_GG_AUTO_CDR_COLUMNSビューを問い合せます。

例16-11 列グループに関する情報の表示

この問合せによって、競合検出および解決のために構成された表について次のような情報が表示されます。

  • 各表の所有者

  • 各表の名前

  • 列グループの名前(列が列グループに属する場合)

  • 列名。

  • 列に関する非表示のタイムスタンプ列(列に対して最新のタイムスタンプの競合解決が構成されている場合)

COLUMN TABLE_OWNER FORMAT A10
COLUMN TABLE_NAME FORMAT A10
COLUMN COLUMN_GROUP_NAME FORMAT A17
COLUMN COLUMN_NAME FORMAT A15
COLUMN RESOLUTION_COLUMN FORMAT A23

SELECT TABLE_OWNER,
       TABLE_NAME, 
       COLUMN_GROUP_NAME,
       COLUMN_NAME,
       RESOLUTION_COLUMN 
  FROM ALL_GG_AUTO_CDR_COLUMNS
  ORDER BY TABLE_OWNER, TABLE_NAME;

出力結果は次のようになります。

TABLE_OWNE TABLE_NAME COLUMN_GROUP_NAME COLUMN_NAME     RESOLUTION_COLUMN
---------- ---------- ----------------- --------------- -----------------------
HR         EMPLOYEES  COMPENSATION_CG   COMMISSION_PCT  CDRTS$COMPENSATION_CG
HR         EMPLOYEES  COMPENSATION_CG   SALARY          CDRTS$COMPENSATION_CG
HR         EMPLOYEES  JOB_IDENTIFIER_CG MANAGER_ID      CDRTS$JOB_IDENTIFIER_CG
HR         EMPLOYEES  JOB_IDENTIFIER_CG JOB_ID          CDRTS$JOB_IDENTIFIER_CG
HR         EMPLOYEES  JOB_IDENTIFIER_CG DEPARTMENT_ID   CDRTS$JOB_IDENTIFIER_CG
HR         EMPLOYEES  IMPLICIT_COLUMNS$ PHONE_NUMBER    CDRTS$ROW
HR         EMPLOYEES  IMPLICIT_COLUMNS$ LAST_NAME       CDRTS$ROW
HR         EMPLOYEES  IMPLICIT_COLUMNS$ HIRE_DATE       CDRTS$ROW
HR         EMPLOYEES  IMPLICIT_COLUMNS$ FIRST_NAME      CDRTS$ROW
HR         EMPLOYEES  IMPLICIT_COLUMNS$ EMAIL           CDRTS$ROW
HR         EMPLOYEES  IMPLICIT_COLUMNS$ EMPLOYEE_ID     CDRTS$ROW
OE         ORDERS     IMPLICIT_COLUMNS$ ORDER_MODE      CDRTS$ROW
OE         ORDERS     IMPLICIT_COLUMNS$ ORDER_ID        CDRTS$ROW
OE         ORDERS     IMPLICIT_COLUMNS$ ORDER_DATE      CDRTS$ROW
OE         ORDERS     IMPLICIT_COLUMNS$ CUSTOMER_ID     CDRTS$ROW
OE         ORDERS     DELTA$            ORDER_TOTAL
OE         ORDERS     IMPLICIT_COLUMNS$ PROMOTION_ID    CDRTS$ROW
OE         ORDERS     IMPLICIT_COLUMNS$ ORDER_STATUS    CDRTS$ROW
OE         ORDERS     IMPLICIT_COLUMNS$ SALES_REP_ID    CDRTS$ROW

この例では、列グループ名としてIMPLICIT_COLUMNS$を持つ列に対して行の競合検出および解決が構成されていますが、これらの列は列グループには属していません。列グループ名としてDELTA$を持つ列には、デルタ競合検出および解決が構成されていますが、これらの列は解決列を持ちません。

列グループに関する情報の表示

ALL_GG_AUTO_CDR_COLUMN_GROUPSビューには、Oracle GoldenGate自動競合検出および解決のために構成された列グループに関する情報が表示されます。
DBMS_GOLDENGATE_ADMパッケージのADD_AUTO_CDRプロシージャを使用して、Oracle GoldenGate自動競合検出および解決を構成できます。DBMS_GOLDENGATE_ADMパッケージのADD_AUTO_CDR_COLUMN_GROUPプロシージャを使用して、列グループを構成できます。
  1. Oracle GoldenGate管理者としてデータベースに接続します。
  2. ALL_GG_AUTO_CDR_COLUMN_GROUPSビューを問い合せます。

例16-12 列グループに関する情報の表示

この問合せによって、競合検出および解決のために構成された表について次のような情報が表示されます。

  • 表の所有者。

  • 表名。

  • 列グループの名前

  • 各列グループの競合解決に使用される非表示のタイムスタンプ列

COLUMN TABLE_OWNER FORMAT A15
COLUMN TABLE_NAME FORMAT A15
COLUMN COLUMN_GROUP_NAME FORMAT A20
COLUMN RESOLUTION_COLUMN FORMAT A25

SELECT TABLE_OWNER,
       TABLE_NAME, 
       COLUMN_GROUP_NAME,
       RESOLUTION_COLUMN 
  FROM ALL_GG_AUTO_CDR_COLUMN_GROUPS
  ORDER BY TABLE_OWNER, TABLE_NAME;

出力は、次のようになります。

TABLE_OWNER     TABLE_NAME      COLUMN_GROUP_NAME    RESOLUTION_COLUMN
--------------- --------------- -------------------- -------------------------
HR              EMPLOYEES       COMPENSATION_CG      CDRTS$COMPENSATION_CG
HR              EMPLOYEES       JOB_IDENTIFIER_CG    CDRTS$JOB_IDENTIFIER_CG