INSERT実行時 ORA-1
発生INSERTROWEXISTS insertをupdate
に変換Insertをスキッ
プ比較して大きい(小さい)場合、
insert
をupdate
に変換N/A
UPDATE実行時
比較不一致UPDATEROWEXISTS updateを実行 updateをス
キップ比較して大きい(小さい)場合、
update
を実行Before ImageとAfter Image
の差を追加UPDATE
実行時ORA-1403
発生UPDATEROWMISSING update
をinsert
に変換Update
をス キップN/A N/A
DELETE
実行時 比較不一致DELETEROWEXISTS delete
を実行Delete
をス キップN/A N/A
DELETE
実行時ORA-1403
発生DELETEROWMISSING N/A Delete
をス キップN/A N/A
RESOLVECONFLICT
2. CDR 概要
双方向連携 ( 競合あり ) の競合解決単位
• サイト単位
一方のサイトを優先サイトとして定義する。
サイト単位の競合解決方式は「優先サイトの更新内容を優先」のみ。
• テーブル単位
テーブル毎に競合解決方式を定義する。
競合発生時にはテーブル毎の競合解決方式に従う。
競合解決方式毎に、伝播対象テーブルをグルーピングする。
3. CDR 設計時の検討事項
双方向連携 ( 競合あり ) の競合解決方式
• 優先サイトの更新内容を優先
優先サイトで発生した更新が非優先サイトで競合した場合は上書きする。
非優先サイトで発生した更新が優先サイトで競合した場合は無視(IGNORE) or 破棄(DISCARD)させる。
• 最新の更新内容を優先
更新時間列を持つテーブルで採用可能な競合解決方式
競合発生時にソース側DML発行時の更新時間とターゲット側更新対象レコー ドの更新時間を比較する。
ソース側DML発行時の更新時間が新しい場合はターゲット側を上書きする。
ターゲット側更新対象レコードの更新時間が新しい場合は無視(IGNORE) or 破棄(DISCARD)させる。
3. CDR 設計時の検討事項
双方向連携 ( 競合あり ) の競合解決パターン事例
• 事例1: 優先サイトの更新を採用/非優先サイトの更新は無視
例) システムAを優先サイトとした場合の例
•
競合解決単位:サイト単位•
競合解決方式:優先サイトの更新内容を優先•
OVERWRITE:競合が発生した場合、データを上書きする•
IGNORE :競合が発生した場合、データは上書きしない競合検知シナリオ システム
A
側の競合解消ルール(システム
B→
システムA
の伝播) システムB
側の競合解消ルール(システム
A→
システムB
の伝播)INSERTROWEXISTS DISCARD or IGNORE OVERWRITE
UPDATEROWEXISTS DISCARD or IGNORE OVERWRITE
UPDATEROWMISSING DISCARD or IGNORE OVERWRITE
DELETEROWEXISTS DISCARD or IGNORE OVERWRITE
DELETEROWMISSING DISCARD or IGNORE DISCARD or IGNORE
3. CDR 設計時の検討事項 RESOLVECONFLICT
双方向連携 ( 競合あり ) の競合解決パターン事例
• 事例2: 値を比較してから最新の更新内容を採用
例) 時刻データが格納された列を比較し、最新であるシステムのデータを優先
•
競合解決単位:テーブル単位•
競合解決方式:最新の更新内容を優先•
USEMAX/USEMIN : ソース列の値がターゲット側よりも大きい(小さい)場合は適用•
USEMAXEQ/USEMINEQ (12.1~): ソース列の値がターゲット側と同じか、大きい(小さい)場合は適用競合検知シナリオ システム
A
側の競合解消ルール(システム
B→
システムA
の伝播) システムB
側の競合解消ルール(システム
A→
システムB
の伝播)INSERTROWEXISTS USEMAXEQ USEMAXEQ
UPDATEROWEXISTS USEMAXEQ USEMAXEQ
UPDATEROWMISSING DISCARD or IGNORE OVERWRITE
DELETEROWEXISTS DISCARD or IGNORE OVERWRITE
DELETEROWMISSING DISCARD or IGNORE DISCARD or IGNORE
3. CDR 設計時の検討事項 RESOLVECONFLICT
双方向連携 ( 競合あり ) の競合解決パターン策定
• 競合解決単位/競合解決方式から競合解決パターンを策定
– 事例1:優先サイトの更新を採用/非優先サイトの更新は無視 – 事例2:値を比較してから最新の更新内容を採用
– DML種別で優先サイトを決定 etc
• 競合解決パターン毎の競合検知シナリオ/競合解消ルールを整理
– サイトと競合検知シナリオの組み合わせ毎に競合解消ルールを決定 – サイト×競合検知シナリオ×競合解消ルールをマトリクスで管理
方式設計フェーズ:競合解決パターンの数と競合解決パターン毎のCDR設定を決定 詳細設計フェーズ:競合解決パターン毎の伝播対象テーブルを決定
3. CDR 設計時の検討事項
競合検知列の策定事例
• 方法 1: 全ての列を比較し競合を検知(事例 1, 2 共にこちらの方法を採用)
– 競合検知を的確に行うため、全ての列を比較することを推奨
– 全列の Before Image を Trail ファイル上に保持する必要があるため、 Trail ファイルサイ ズは大きくなる
– LOB 型の列は Before Image を取得することができないため使用できない
• CDR では、 NUMERIC, DATE, TIMESTAMP, CHAR/NCHAR, VARCHAR/NVARCHAR をサポート
• 方法 2: 一部の列を比較し競合を検知
– UPDATE 競合では、列レベルでの整理が必要となるため設計時のコストが高い
– 更新が発生する列に絞ることができるため、方法 1 と比較して Trail ファイルサイズは 抑制できる
UPDATE/DELETE 時の競合発生をどの列で検知するか?
3. CDR 設計時の検討事項 COMPARECOLS
CDR を使用するために必要となる設定項目( Capture )
• Capture
表レベルサプリメンタル・ロギングの設定 (ADD TRANDATA)
‒ 主キーと競合検知に使用する列に、表レベルサプリメンタル・ロギングの設定
EXCLUDEUSER or EXCLUDEUSERID パラメータの設定
‒ Replicat で適用されたレコードを、 Capture が再度取得するループを回避
GETBEFORECOLS パラメータの設定
‒ Before Image を出力する列名の指定( LOB 列は除外する必要あり)
‒ UPDATE, DELETE で CDR を使用する場合は必要。 INSERT のみの場合は不要。
CDROPTIONS _LOGALLSUPPCOLS パラメータの設定 (Doc ID 1460018.1)
‒ UPDATE 競合時のデータ不整合を防ぐため、 OGG 11.2 でのみ設定が必要
4. CDR 設定項目
CDR を使用するために必要となる設定項目( Replicat )
• Replicat
COMPARECOLS パラメータの設定
‒ 競合検知・解決に使用する列名の指定( LOB 列は除外する必要あり)
‒ Extract に GETBEFORECOLS パラメータが指定され、 Before Image が出力されている必要がある。
RESOLVECONFLICT パラメータの設定
‒ 競合検知シナリオと競合解決ルールを指定
4. CDR 設定項目
まとめ
GoldenGate 活用事例のご紹介
• メンテナンス時間の短縮
• 本番データを利用した AP テスト
イベント・マーカーの活用事例
• MView でのレプリケーション長期化をイベント・マーカーで解消
Conflict Detection and Resolution(CDR) 技術 Tips
• データ競合に対するアプローチ
Appendix
4
表レベルサプリメンタル・ロギングの設定
• 主キーと競合検知に使用する列に、表レベルサプリメンタル・ロギングの 設定が必要
– 全ての列を比較する場合は、全列が対象
– LOB 列がある場合は、 Oracle データベースの制限でサプリメンタル・ロギングを設定 できないため、 LOB 列を除外する必要がある
ADD TRANDATA の実行
--NOKEYなしの場合は、主キー以外の列を指定
GGSCI> ADD TRANDATA <schema>.<table>, COLS (<col1>,<col2>,…) --NOKEYをつける場合は、主キーを含む列を指定
GGSCI> ADD TRANDATA <schema>.<table>, NOKEY, COLS (<col_pk>,<col1>,<col2>,…)
UPDATE 競合時のデータ不整合の対応、 OGG11.2 のみ (1/2)
• システム A を優先システムとしている場合の例
– 各システムで異なる列が更新されるケースにおいて、更新が発生した列のみの伝播が行われ、データの不
整合が発生
ドキュメント内
データ統合/連携の領域におけるリアリティ
(ページ 34-46)