• 検索結果がありません。

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)

関連したドキュメント