PowerReplicationにおける競合について説明します。
差分同期を行う場合、同期実行から次の同期実行の間にマスタとレプリカで同じキー値のレコードを更新、追加、または削除を行うと、データベース間の整合性が保てない状態になります。このような状態を「競合」といいます。
運用形態が共用で「競合」が発生すると、マスタまたはレプリカの更新情報が破棄されます。
マスタグループ定義の作成時に[競合解消ルール]を選択することによって、更新情報を破棄する条件を設定できます。これによって、競合を解消できます。ただし、マスタまたはレプリカに対して利用者プログラムが1回のトランザクション区間内で同じキー値のレコードを追加、更新、削除を行うと競合が解消できません。
競合が発生しないように、利用者プログラムおよび運用を設計してください。
なお、同じキー値の同一レコードでも、マスタとレプリカで異なる項目を更新した場合は、競合は発生しません。
競合が発生すると、詳細メッセージ情報ファイルに詳細情報が出力されます。出力内容の詳細は、"付録F 詳細メッセージ情報ファイルの出力形式"を参照してください。
また、マスタグループ定義およびレプリカグループ定義の作成時に[競合検出を行う]を設定した場合、競合が発生したことをイベントビューア(アプリケーションログ)に警告として通知されます。
競合の発生条件
競合の発生条件には、以下の三つがあります。
更新の競合
データを更新することによって発生する競合です。
反映先に更新を反映しようとしているデータが、前回の同期で反映したデータから変更されている場合に競合が発生したと判断します。
追加の競合
レコードを追加することによって発生する競合です。
反映先に追加しようとしているレコードがすでに反映先のデータファイルに存在している場合に競合が発生したと判断します。
削除の競合
レコードを削除することによって発生する競合です。
反映先で削除しようとしているレコードが存在しない場合、または更新情報ファイルの削除前のレコードと反映先の現レコードが一致しない場合に競合が発生したと判断します。
図2.14 競合検出の例