自動競合検出および解決
ノート:
自動競合検出および解消機能は、Oracle Database 12cリリース2 (12.2)以降に固有の機能で、Oracleデータベースで構成されます。また、Oracle GoldenGate 12c (12.3.0.1)以降が必要です。Oracle GoldenGate競合検出および解消(CDR)と呼ばれる手動の競合検出および解消機能が存在します。Oracle GoldenGate CDRはReplicatパラメータ・ファイルで構成します。Oracle GoldenGate CDRの詳細は、次を参照してください自動競合検出および解消について
Oracle GoldenGateによってOracleデータベース間で変更をレプリケートする場合、これらのデータベースで、Oracle GoldenGate競合検出および解決を自動的に構成して管理できます。
この機能は、アクティブ/アクティブ構成で使用することを目的としています。この場合、Oracle GoldenGateでは、同じデータセットを含む複数のデータベース間のデータ同期を維持する必要があります。
ノート:
Oracle DatabaseでOracle GoldenGateを使用する場合にのみ使用可能な自動競合検出および解決(ACDR)機能です。Oracle以外のデータベースの場合、Oracle GoldenGateでは手動の競合検出および解決(CDR)機能を使用できます。Oracle GoldenGate CDRはReplicatパラメータ・ファイルで構成します。
トピック:
- 自動競合検出および解決
- 自動競合検出および解決の要件
- 列グループ
- DELETE TOMBSTONE表
- 最初のタイムスタンプの競合検出および解決
- 最新タイムスタンプの競合検出および解決
- 削除を常時優先するタイムスタンプのCDR
- デルタ競合検出および解決
- サイト優先度のCDR
- 削除ツームストーンのPK更新の追跡
親トピック: 自動競合検出および解決
自動競合検出および解決
Oracle Database間で表をレプリケートするOracle GoldenGate構成によって、自動競合検出および解決を構成できます。表に対して競合検出および解決を構成するには、DBMS_GOLDENGATE_ADM
パッケージのADD_AUTO_CDR
プロシージャをコールします。これは管理APIです。つまり、DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE
によって権限が付与されたOracle GoldenGate管理者がコールすることを想定しています。このユーザーには、影響する表を変更するための権限が必要になります。こうしたAPIによって、オブジェクトのバージョン番号がバンプされ、DDL実行のためにオブジェクトのロックも発生します。
-
EARLIEST_TIMESTAMP_RESOLUTION=0x0001
では、TOMBSTONE KEY VERSIONING
を自動的に設定します。 -
DELETE_ALWAYS_WINS=0x0002
では、TOMBSTONE KEY VERSIONING
を自動的に設定します。 -
IGNORE_SITE_PRIORITY=0x0004
Oracle GoldenGateが、Oracle Databaseが発生元である変更を取得するときに、各変更が行の論理変更レコード(LCR)にカプセル化されます。行LCRはDML行変更の構造化表現です。それぞれの行LCRに操作タイプ、古い列値および新しい列値が含まれます。複数の行LCRを単一のデータベース・トランザクションに含めることができます。
表の複数のレプリカで、表に対する変更が許可される場合に、異なる2つのデータベースの同じ行にほぼ同時に変更が加えられると、競合が発生することがあります。Oracle GoldenGateは行のLCRを使用して変更をレプリケートします。競合を検出するために、発生元データベースでの初期変更の行LCRに含まれる古い値を、宛先データベースの対応する表の行の現在の値(キー列で識別される)と比較します。一致しない列値がある場合は、競合が存在します。
競合を検出すると、Oracle GoldenGateは競合を解決するために、行の値を行LCRに含まれる値で上書きするか、行LCRの値を無視するか、デルタを計算して行の値を更新します。
次に示す理由で、自動競合検出および解決のためにアプリケーションを変更する必要はありません。
-
Oracle Databaseによって非表示のタイムスタンプ列が自動的に作成されて保持されます。
-
挿入、更新および削除では、削除ツームストン・ログ表が使用されて行が削除されたか判断されます。
-
LOB列の競合を検出できます。
-
Oracle Databaseによって必要な列に対するサプリメンタル・ロギングが自動的に構成されます。
関連項目:
-
サプリメンタル・ロギングの詳細は、Oracle Databaseユーティリティを参照
親トピック: 自動競合検出および解決について
自動競合検出および解決の要件
サプリメンタル・ロギングは、競合を検出して解決するために必要な情報をそれぞれの行LCRに確実に含めるために必要です。サプリメンタル・ロギングは、表に対してDML操作が実行されたときに、表の行に関するREDOログに追加情報を配置します。Oracle GoldenGate競合検出および解決のために表を構成するときに、表のすべての列に対してサプリメンタル・ロギングが自動的に構成されます。REDOログの追加情報は、表の変更がレプリケートされるときにLCRに配置されます。
キャプチャには、Extractを使用する必要があります。統合Replicatまたは統合モードのパラレルReplicatを、適用側で使用する必要がありますLOGALLSUPCOLS
はデフォルトのままにしてください
DELETE TOMBSTONE
表には、オプションで追加されるタイムスタンプ型の非表示フィールドKEYVER$$
があります。このフィールドは、EARLIEST TIMESTAMP
、DELETE ALWAYS WINS
およびSITE PRIORITY
の解決のために必要になり、実表にも存在します。このフィールドが実表に存在することは、フラグまたはトークンとして証跡ファイルのメタデータで提示する必要があります。
DELETE TOMBSTONE
表では、主キーの更新もサポートされています。DELETE TOMBSTONE
表に、元のキー値の行(変更前イメージ)のためのエントリが挿入されます。DELETE TOMBSTONE
表内の挿入を削除と一致させるExtractのロジックでは、PK更新またはPKがない場合はNULL値不可能のフィールドが1つ以上ある一意キー(UK)に一致させることも必要です。
サイト優先度には、Replicatからのサポートが必要です。両方のパラメータが実装され、その設定が適用に渡されます。
親トピック: 自動競合検出および解決について
互換性と移行
KEYVER$$
が存在しない実表から、EARLIEST TIMESTAMP
解決のサポート、DELETE ALWAYS WINS
解決またはSITE PRIORITYの設定されたターゲットにレプリケートすると、DELETE
またはPK更新に関連する場合にエラーが発生します。
KEYVER$$
が存在する実表から、それが存在しないターゲットへのレプリケートでは、KEYVER$$
は無視され、それより前のリリースにレプリケートするときには、フィールドは削除されるかサポートされません。
例
keyver$$
列が存在しないまたは以前のRDBMSバージョンのサイト1からサイト2へのレプリケーションでのEARLIEST TIMESTAMP
解決を示します。サイト1 | サイト2 | 説明 |
---|---|---|
挿入 |
挿入 |
サイト1のCDRTS$ タイムスタンプのほうが前になる場合はサイト1が優先され、それ以外の場合はサイト2が優先されます。
|
挿入 |
更新 |
挿入/挿入と同じです。 |
挿入 |
削除 |
競合は解決できません。構成によっては、エラーがエラー・キューに送られて、破棄されます。 |
挿入 |
pk更新 |
挿入/削除と同じです。 |
更新 |
挿入 |
挿入/挿入と同じです |
更新 |
更新 |
挿入/挿入と同じです |
更新 |
削除 |
挿入/削除と同じです。 |
更新 |
pk更新 |
挿入/削除と同じです。 |
削除 |
挿入 |
挿入/削除と同じです。 |
削除 |
更新 |
挿入/削除と同じです。 |
pk更新 |
挿入 |
挿入/削除と同じです。 |
pk更新 |
更新 |
挿入/削除と同じです。 |
pk更新 |
削除 |
挿入/削除と同じです。 |
主キーの更新(pk更新)の相互運用性は、バックポートなしでは正しく解決されません。前述の相互運用性の問題に加えて、以前のバージョンのRDBMSにレプリケートされたpk更新は正しく解決されません。以前のRDBMSでの挿入とレプリケートされたpk更新が競合すると、結果が2行になる可能性があります。元の行への挿入が成功して、pk更新が更新に成功するか新しい行を作成することになります。
プロシージャ属性とビュー列にのみ変更が加えられるため、アップグレード・スクリプトやダウングレード・スクリプトは不要です。
親トピック: 自動競合検出および解決の要件
列グループ
列グループは、レプリケート表の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 WRITE
、LOB ERASE
およびLOB TRIM
からなるLOB操作のセットは、ピース単位のLOB更新です。LOB列を含む表に対して競合検出および解決が構成されている場合、各LOB列は独自の列グループに配置され、列グループは独自の非表示のタイムスタンプを持ちます。タイムスタンプ列は、最初のピース単位のLOB操作時に更新されます。
LOB列の場合、次のように競合が検出されて解決されます。
-
LOBの列グループのタイムスタンプが、行の対応するLOB列グループより遅い場合、ピース単位のLOB更新が適用されます。
-
LOBの列グループのタイムスタンプが、行の対応するLOB列グループより早い場合、表の行のLOBが保持されます。
-
表に行が存在しない場合はエラーが発生します
親トピック: 自動競合検出および解決について
DELETE TOMBSTONE表
DELETE TOMBSTONE
表は、削除されたレコード用のマーカーです。これにより、削除されたレコードと存在したことのないレコードを区別します。DELETE TOMBSTONE
表には、少なくともキー列と操作タイムスタンプが格納されます。この情報は、削除の収束のために必要になります。受信する更新と挿入の一部は別のサイトから遅延する可能性があり、受信するLCRを適用するかどうかの決定はツームストン操作のタイムスタンプと比較してフィルタ処理する必要があるためです。
親トピック: 自動競合検出および解決について
最初のタイムスタンプの競合検出および解決
名前の形式がCDRTS$ column group
およびCDRTS$ROW
の列は、列グループおよび行の変更時刻を反映するタイムスタンプの格納に使用します。DBMS_GOLDENGATE_ADM
プロシージャのADD_AUTO_CDR()
、ADD_AUTO_CDR_COLUMN_GROUP()
、REMOVE_AUTO_CDR()
、REMOVE_AUTO_CDR_COLUMN_GROUP()
、ALTER_AUTO_CDR()
およびALTER_AUTO_CDR_COLUMN_GROUP()
は、現時点では、最新のタイムスタンプの解決でACDRを構成するために使用します。また、最初のタイムスタンプの解決でACDRを構成する場合にも使用します。ADD_AUTO_CDR()
とALTER_AUTO_CDR()
の両方にあるフィールドADDITIONAL_OPTIONS
で最初のタイムスタンプの使用をオンにします。最初のタイムスタンプをオンにすると、自動的にバージョニングがオンになり、タイムスタンプ型の新しい非表示列KEYVER$$
(バージョン番号)が追加されます。最初のタイムスタンプの使用を示すために、新しいフラグ値がacdrflags_kqldtvc
に追加されます。このフィールドは、DELETE TOMBSTONE
表にも追加されます。削除の競合があるために、バージョン番号が必要になります。最初のタイムスタンプの解決では、透過的になる可能性のある削除の競合が誤って成功するだけでなく、行の新規挿入(新規バージョン)が妨げられることもあります。バージョン・タイムスタンプでは、同じ行バージョンの行DMLに対して削除を適切に解決できます。
行の元の挿入は、そのデフォルト値から現在のタイムスタンプを受信します。この行を削除すると、この行が挿入されたときのバージョン番号と時刻が削除時にツームストン表に挿入されます。新しい挿入の場合、デフォルトでは、バージョン番号が現在のタイムスタンプを再度受信するため、ツームストン表の現在の削除エントリとの誤った競合が回避されます。
例
キー・バージョンがkv
、タイムスタンプがts
の場合
データベース1: insert tab1 key1 kv1 ts1
データベース2: delete tab1 key1 kv1 ts1
DELETE TOMBSTONE表への挿入key1 kv1 ts1
データベース1: insert tab1 key1 kv2 ts2
キー・バージョンを使用しない場合は、挿入が無視され、削除タイムスタンプはそれよりも前になります。キー・バージョンが使用されているため、kv2
は削除された行のバージョンでないことがわかり、挿入が成功します。
親トピック: 自動競合検出および解決について
最新のタイムスタンプの競合検出および解消
DBMS_GOLDENGATE_ADM
パッケージのADD_AUTO_CDR
プロシージャを実行して、Oracle GoldenGate自動競合検出および解決のために表を構成すると、非表示のタイムスタンプ列が表に追加されます。この非表示のタイムスタンプ列によって行変更の時間が記録され、この情報を使用して競合が検出されて解決されます。
行LCRを適用すると、INSERT
、UPDATE
またはDELETE
操作で競合が発生する可能性があります。次の表では、それぞれの競合のタイプと、その解決方法について説明します。
操作 | 競合検出 | 競合解決 |
---|---|---|
|
競合が検出されるのは、表のキー列の値が行LCRの新しい値と同じ場合です。 |
行LCRのタイムスタンプが表の行のタイムスタンプより遅い場合は、行LCRの値で表の値が置き換えられます。 行LCRのタイムスタンプが表の行のタイムスタンプより早い場合は、行LCRが破棄され、表の値が保持されます。 |
|
次のそれぞれの場合に競合が検出されます。
|
値が一致せず、行LCRのタイムスタンプが表の行のタイムスタンプより遅い場合は、行LCRの値で表の値が置き換えられます。 値が一致せず、行LCRのタイムスタンプが表の行のタイムスタンプより早い場合は、行LCRが破棄され、表の値が保持されます。 表の行が存在せず、行LCRのタイムスタンプがツームストン表の行のタイムスタンプより遅い場合は、行LCRが 表の行が存在せず、行LCRのタイムスタンプがツームストン表の行のタイムスタンプより早い場合は、行LCRが破棄されます。 表の行が存在せず、対応する行がツームストン表に存在しない場合は、行LCRが |
|
次のそれぞれの場合に競合が検出されます。
|
行LCRのタイムスタンプが表のタイムスタンプより遅い場合は、行が表から削除されます。 行LCRのタイムスタンプが表のタイムスタンプより早い場合は、行LCRが破棄され、表の値が保持されます。 削除が成功した場合は、行LCRがツームストン表に挿入されてログに記録されます。 表の行が存在しない場合は、行LCRがツームストン表に挿入されてログに記録されます。 |
親トピック: 自動競合検出および解決について
削除を常時優先するタイムスタンプのCDR
DELETE ALWAYS WINS
は、DBMS_GOLDENGATE_ADM
プロシージャのADD_AUTO_CDR()
とALTER_AUTO_CDR()
の両方のフィールドADDITIONAL_OPTIONS
によって有効化します。これも削除の競合解決の方法ですが、最新のタイムスタンプの解決を使用していないことからバージョニングが必要になります。DELETE ALWAYS WINS
をオンにすると、自動的にバージョニングがオンになり、タイムスタンプ型の新しい非表示列KEYVER$$
(バージョン番号)が追加されます。DELETE ALWAYS WINS
の使用を示すために、新しいフラグ値がacdrflags_kqldtvc
に追加されます。このフィールドは、DELETE TOMBSTONE
表にも追加されます。EARLIEST TIMESTAMPの解決と同様にバージョニングの問題が存在します。
例:
キー・バージョンがkv
、タイムスタンプがts
データベース1: insert tab1 key1 kv1 ts1
データベース2: delete tab1 key1 kv1 ts1
DELETE TOMBSTONE
表への挿入key1 kv1 ts1
データベース1: insert tab1 key1 kv2 ts2
キー・バージョンを使用しない場合は、挿入が無視され、削除が常時優先されます。キー・バージョンが使用されているため、kv2
は削除された行のバージョンでないことがわかり、挿入が成功します。
親トピック: 自動競合検出および解決について
デルタ競合検出および解消
デルタ競合検出では、行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
列の値が同一になります。
親トピック: 自動競合検出および解決について
サイト優先度のCDR
ノート:
SITE PRIORITY
の解決は、すべてのCOLUMN GROUP
の解決設定よりも優先されます。
ノート:
ReplicatパラメータのSITE PRIORITY
が、パラメータ・ファイル内の適切なマップ文の前に配置されていない場合は機能しません。このパラメータは、適切なマップ文の前に配置する必要があります。
競合解決のソースとターゲットの間でのReplicatパラメータ・ファイルで指定した優先度による解決。
SITE PRIORITY
は、Replicatパラメータ・ファイルでデータベースまたはPDBに対してオンにします。このファイルで、表に対するSITE PRIORITY
の解決をオンにするために、パラメータACDR SITE_PRIORITY {source_db_name}{OVERWRITE | IGNORE }
を指定します。OVERWRITE
を指定すると、ソース表が優先され、競合はOVERWRITE
によって解決されます。それとは逆に、IGNORE
を指定すると、ターゲット表が優先され、競合時にはソース表の変更が無視されます。SITE PRIORITY
の解決をオフにするには、DBMS_GOLDENGATE_ADM
プロシージャのADD_AUTO_CDR()
とALTER_AUTO_CDR()
の両方のフィールドADDITIONAL_OPTIONS
でビットIGNORE_SITE_PRIORITY
を設定します。Replicatのソースとターゲットの関係は様々な設定が可能なため、収束はユーザーの設定に依存します。
親トピック: 自動競合検出および解決について
削除ツームストーンのPK更新の追跡
主キー(PK)の更新を完全にサポートするには、キーの変更前イメージで表される行とキーの変更後イメージで表される行の両方で競合を処理する必要があります。PK更新は自律型の削除および挿入のため、PK更新の競合は、キーの変更前イメージの競合とキー(および行)の変更後イメージの挿入の削除としてサポートされている必要があります。
キーの変更前イメージで表される行の削除としてPK更新をサポートすることは、削除ツームストン表に削除として挿入する必要があることを意味します。PKの更新時にツームストン表に挿入するために、更新内部トリガーが追加されます(実際には、行を識別するキーが追加されます。これは、存在する場合はPK、それ以外の場合はNULL値不可能の列が1つ以上ある指定のUKになります)。PKの更新によって2つの競合が発生する可能性があるため、行レベルで最大2つの解決が試行され、元のPKを持つ行が削除され、新しいPKを持つ行が挿入されます。
例: 最新のタイムスタンプの解決の使用
データベース1: tab1 key1 at ts1
に対する更新
データベース2: tab1 key1 set key1 to key2 ts2
に対する更新
データベース3: tab1 key2 ts3
に対する更新
このシナリオでは、行レベルでkey1
を含むtab1
の行が削除され、データベース3の更新がtab1
の行key2の最終変更になると考えられます。かわりに、データベース2がts3
で、データベース3がts3
の場合は、データベース2でのPK更新がtab1
の行key2
の最終変更になります。
ここで、データベース1がts3
、データベース2がts2
、データベース3がts1
の場合について考えてみると、データベース1のtab1
の行key1
への更新は成功し、データベース2のtab1
の行key2
からのPK更新は成功します。この時点で、完全な解決策では、変更前イメージの削除と変更後イメージの挿入の両方を別々に解決する必要があると考えられます。これは、その両者が相互に依存することなく、一方の値の損失が両方の損失にならないことを意味します。
親トピック: 自動競合検出および解決について
デルタ競合検出および解消の構成
DBMS_GOLDENGATE_ADM
パッケージのADD_AUTO_CDR_DELTA_RES
プロシージャを使用して、デルタ競合検出および解決を構成します。
デルタ競合解決では、競合が検出された列を1つ指定して解決します。行LCRの列の値が表の対応する値と一致しない場合に、競合が検出されます。競合を解決するために、行LCRの新しい値と古い値の差が表の値に加算されます。
DBMS_GOLDENGATE_ADM
パッケージのGRANT_ADMIN_PRIVILEGE
プロシージャを使用して、Oracle GoldenGate管理者を構成できます。
- Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
ADD_AUTO_CDR
プロシージャを実行して表を指定し、最新のタイムスタンプの競合検出および解決を構成します。ADD_AUTO_CDR_DELTA_RES
プロシージャを実行して、デルタ競合検出および解決の実行対象の列を指定します。- 表をレプリケートする各Oracle Databaseに対して前述のステップを繰り返します。
例11-20 表に対するデルタ競合検出および解決の構成
この例では、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
パッケージの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管理者を構成できます。
- Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
ADD_AUTO_CDR
プロシージャを実行して表を指定し、最新のタイムスタンプの競合検出および解決を構成します。- オプション:
ALTER_AUTO_CDR_COLUMN_GROUP
プロシージャを実行して、表に1つ以上の列グループを指定します。 - 表をレプリケートする各Oracle Databaseに対して前述のステップを繰り返します。
例11-21 表に対する最新タイムスタンプの競合検出および解決の構成
この例では、hr.employees
表に対して、最新タイムスタンプの競合検出および解決を構成します。
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR(
schema_name => 'hr',
table_name => 'employees');
END;
/
例11-22 列グループの構成
この例では、hr.employees
表に対するタイムスタンプの競合解決のために、次の列グループを構成します。
-
job_identifier_cg
列グループには、job_id
、department_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管理者を構成できます。
- Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
ADD_AUTO_CDR
プロシージャを実行して表を指定し、最新のタイムスタンプの競合検出および解決を構成します。ADD_AUTO_CDR_DELTA_RES
プロシージャを実行して、デルタ競合検出および解決の実行対象の列を指定します。- 表をレプリケートする各Oracle Databaseに対して前述のステップを繰り返します。
例11-23 表に対するデルタ競合検出および解決の構成
この例では、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管理者としてインバウンド・サーバー・データベースに接続します。
ALTER_AUTO_CDR
プロシージャを実行して表を指定し、最新のタイムスタンプの競合検出および解決を構成します。- 表をレプリケートする各Oracle Databaseに対して前述のすべてのステップを繰り返します。
例11-24 表に対する競合検出および解決の変更
この例では、HR.EMPLOYEES
表の競合検出および解決を変更して、ツームストン表で削除の競合を追跡するよう指定しています。
BEGIN
DBMS_GOLDENGATE_ADM.ALTER_AUTO_CDR(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
TOMBSTONE_DELETES => TRUE);
END;
/
親トピック: 自動競合検出および解決の管理
列グループの変更
ALTER_AUTO_CDR_COLUMN_GROUP
プロシージャにより列グループを変更します。
- Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
ALTER_AUTO_CDR_COLUMN_GROUP
プロシージャを実行して、表に1つ以上の列グループを指定します。- 表をレプリケートする各Oracle Databaseに対して前述のすべてのステップを繰り返します。
例11-25 列グループの変更
この例では、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
プロシージャにより、指定の日時より前に記録されたツームストン行を削除します。このプロシージャは、データベースの競合解決が構成されているすべての表のツームストン行を削除します。
- Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
PURGE_TOMBSTONES
プロシージャを実行して日時を指定します。
例11-26 ツームストン行のパージ
この例では、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
プロシージャを使用して、自動競合検出および解決を表から削除します。このプロシージャは、表に対して構成された列グループ、およびデルタ競合検出および解決も削除します。
- Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
REMOVE_AUTO_CDR
プロシージャを実行して表を指定します。- 表をレプリケートする各Oracle Databaseに対して前述のすべてのステップを繰り返します。
例11-27 表の競合検出および解決の削除
この例では、hr.employees
表の競合検出および解決を削除します。
BEGIN
DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR(
schema_name => 'hr',
table_name => 'employees');
END;
/
親トピック: 自動競合検出および解決の管理
列グループの削除
REMOVE_AUTO_CDR_COLUMN_GROUP
プロシージャにより列グループを削除します。
- Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
REMOVE_AUTO_CDR_COLUMN_GROUP
プロシージャを列グループの名前を指定して実行します。- 表をレプリケートする各Oracle Databaseに対して前述のすべてのステップを繰り返します。
例11-28 列グループの削除
この例では、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
プロシージャを使用して、列に対するデルタ競合検出および解決を削除します。
- Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
REMOVE_AUTO_CDR_DELTA_RES
プロシージャを実行して列を指定します。- 表をレプリケートする各Oracle Databaseに対して前述のすべてのステップを繰り返します。
例11-29 表のデルタ競合検出および解決の削除
この例では、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自動競合検出および解決のために構成された表に関する情報が表示されます。
- データベースに接続
ALL_GG_AUTO_CDR_TABLES
ビューを問い合せます。
例11-30 競合検出および解決のために構成された表に関する情報の表示
この問合せによって、競合検出および解決のために構成された表について次のような情報が表示されます。
-
各表の所有者
-
各表の名前
-
更新/削除競合により削除された行を格納するツームストン表(表に対してツームストン表が構成されている場合)
-
各表の競合解決に使用される非表示のタイムスタンプ列
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自動競合検出および解決のために構成された列に関する情報が表示されます。
- Oracle GoldenGate管理者としてデータベースに接続します。
ALL_GG_AUTO_CDR_COLUMNS
ビューを問い合せます。
例11-31 列グループに関する情報の表示
この問合せによって、競合検出および解決のために構成された表について次のような情報が表示されます。
-
各表の所有者
-
各表の名前
-
列グループの名前(列が列グループに属する場合)
-
列名。
-
列に関する非表示のタイムスタンプ列(列に対して最新のタイムスタンプの競合解決が構成されている場合)
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
プロシージャを使用して、列グループを構成できます。
- Oracle GoldenGate管理者としてデータベースに接続します。
ALL_GG_AUTO_CDR_COLUMN_GROUPS
ビューを問い合せます。
例11-32 列グループに関する情報の表示
この問合せによって、競合検出および解決のために構成された表について次のような情報が表示されます。
-
表の所有者。
-
表名。
-
列グループの名前
-
各列グループの競合解決に使用される非表示のタイムスタンプ列
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
親トピック: 自動競合検出および解決のモニタリング