自動競合検出および解決

Oracleデータベース間で表をレプリケートするOracle GoldenGate構成で自動競合検出および解消を構成できます。表に対して自動競合検出および解決を構成するには、DBMS_GOLDENGATE_ADMパッケージのADD_AUTO_CDRプロシージャをコールする必要があります。自動競合検出および解決を設定するための前提条件として、Oracle GoldenGateユーザーには適切な権限が必要です。ユーザー権限の詳細は、「Oracle GoldenGate Classic Architecture用のOracle Databaseのユーザー権限の付与」を参照してください。

管理者ユーザーは、ADD_AUTO_CDRのコール時に適切なPDBにログインしている必要があります。ビット・フラグを表す次の定数が追加されました。
  • EARLIEST_TIMESTAMP_RESOLUTIONでは、TOMBSTONE KEY VERSIONINGを自動的に設定します。

  • DELETE_ALWAYS_WINSでは、TOMBSTONE KEY VERSIONINGを自動的に設定します。

  • IGNORE_SITE_PRIORITY

次の例では、HR.EMPLOYEES表に対してALTERコマンドを使用します。

BEGIN
 dbms_goldengate_adm.alter_auto_cdr
 (schema_name => 'HR' 
 ,table_name => 'EMPLOYEES' 
 ,additional_options => DBMS_GOLDENGATE_ADM.ADDITIONAL_OPTIONS_ADD_KEY_VERSION );
END;
/

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』ADD_AUTO_CDRプロシージャadditional_optionsの説明を参照してください。

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

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

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

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

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

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

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

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