同期の矛盾の解決

クライアントが DB2 Everyplace 同期サーバーに変更内容をサブミットする時点で、 他のクライアントまたはアプリケーションがそれ以前にソース表を変更していた場合、 またはソース表を同時に変更した場合などに、矛盾が発生することがあります。同期サーバーは、レプリケーション・サブスクリプションにおける各表の各記録の バージョンをトラッキングします。各クライアントは、各クライアントの各表との最後の同期 の各レコードのバージョンを維持するために同じようにトラックされます。 この情報によって、同期サーバーは、クライアントが行の古いバージョンのデータ に基づいてその行を更新しようとしているかどうかを判別することができます。 クライアントが行の古いバージョンのデータに基づいてその行の更新を試みた場合は、 更新はリジェクトされます。

矛盾の解決は、図 7 に示すように、 データが中間層システム上のミラー表にステージされるときに行われます。この 解決は、クライアントが同期セッションを実行した後のレプリケーション・サイクルで 行われます。このため、クライアントの更新が原因で発生した矛盾は、 その同期中に応答メッセージがそのクライアントに戻されるまで検出され ません。 レプリケーションで矛盾が発見されると、次の同期セッションで、 クライアントの変更内容がリジェクトされたことがクライアントに通知されます。 クライアントによる変更が古いレコードに 基づいたものである場合は、 そのレコードの正しいバージョンが元の同期要求で 戻されます。

図 7. 同期サーバーによる矛盾の取扱方法

図 4 の開始。 同じ大きさのボックス が 2 つ、上下にあります。上のボックスは、クライアント 1 を表しています。 下のボックスは、クライアント 2 を表しています。 2 つのボックスの両方から、中間層システムを表す大きなボックスに向かう矢印があります。 クライアント 1 を表すボックスには、VNMEDICALRECORD 表があります。 ボックスの下には「最後に取った同期: 12:02:04」と書かれています。 クライアント 2 を表すボックスには、VNMEDICALRECORD 表があります。 ボックスの下には「最後に取った同期: 12:02:45」と書かれています。 クライアント 1 を表すボックスからは、中間層システムを表すボックスに向かう矢印があります。 矢印の上には、「更新」と書かれています。 矢印の先には「リジェクト」と書かれています。 クライアント 2 を表すボックスからは、中間層システムを表すボックスに向かう矢印があります。 矢印の上には、「更新」と書かれています。 中間層システムを表すボックスには、M_VNURSE ミラー・データベースがあります。 クライアント 2 からの矢印は、ミラー・データベースの内部に入り 込み、VNMEDICALRECORD ミラー表を作成しています。 クライアント 1 からの矢印は、ミラー・データベースに到達する前にリジェクトされます。 図 4 の終了。

更新がリジェクトされたクライアントは、リジェクトされたレコードと、そのレコードの訂正バージョンの両方を受け取ります。 リジェクトされたレコードは、クライアントのログに記録されるか、 またはクライアント API によりアプリケーションに提供されます。 そのレコードの訂正バージョンが、 クライアントの DB2 Everyplace データベースにある元の (リジェクトされた) レコードを置き換えます。

DataPropagator が変更されたデータを中間層からソース・データベースにアプライする場合は、 別のタイプの矛盾が発生します。これらの矛盾の管理および解決の方法の詳細に ついては、「DB2 Universal Database レプリケーションのガイドおよびリファレンス 」および「DB2 Universal Database 管理ガイド 」を参照してください。

関連した概念

関連したタスク