サブスクリプションの種類と割り当てられた優先度に基づくマージ競合解決の例
割り当てられた優先度値、およびサブスクリプションの種類 (サーバー サブスクリプションまたはクライアント サブスクリプション) に従って競合を解決する方法を理解するために、以下の例で複数のマージ同期による行の一連の更新について説明します。
基本的なマージ レプリケーション トポロジの 4 つのサイト (1 つのパブリッシャ、サーバー サブスクリプションを使用した 2 つのサブスクライバ、クライアント サブスクリプションを使用した 1 つのローカル サブスクライバ) に対する初期優先度値を以下に示します。
サイト | 型 | 優先度値 |
---|---|---|
A |
Publisher |
100.00 |
B |
Server Subscription |
75.00 (割り当て) |
C |
Server Subscription |
50.00 (割り当て) |
D |
Client Subscription |
0.00 (既定値) |
フェーズ 1 : 初期値
最初に、サイト A (パブリッシャ) で、「Nebraska」という値を含む行のバージョン 1 が作成されます。この行は、次回の同期時にサイト B、C、および D にレプリケートされます。同期が完了すると、次のような行の値になります。
サイト | 優先度値 | 行の値 |
---|---|---|
A (パブリッシャ) |
100.00 |
Nebraska |
B (サーバー サブスクリプション) |
75.00 |
Nebraska |
C (サーバー サブスクリプション) |
50.00 |
Nebraska |
D (クライアント サブスクリプション) |
0.00 |
Nebraska |
フェーズ 2 : パブリッシャおよびサーバー サブスクリプションを使用したサブスクライバの両方での行の更新
行の値が、サイト A では「Texas」、サイト B では「New Jersey」に更新されます。次回のマージ同期が行われると、サイト A とサイト B が競合しますが、サイト A が優先されます。競合で優先されたサイト A の値がサイト B、C、および D に反映されます。
サイト | 優先度値 | 行の値 |
---|---|---|
A (パブリッシャ) |
100.00 |
Texas |
B (サーバー サブスクリプション) |
75.00 |
Texas |
C (サーバー サブスクリプション) |
50.00 |
Texas |
D (クライアント サブスクリプション) |
0.00 |
Texas |
フェーズ 3 : 同じ行に対する複数の変更
サイト C で行を「North Carolina」に変更し、パブリッシャと同期するとします。この場合、サイト C は既にサイト A から最新の更新をマージしているため (行の値「Texas」が正常にマージされているため)、競合は発生しません。次に、サイト B で行を「Idaho」に更新するとします。
サイト | 優先度値 | 行の値 |
---|---|---|
A (パブリッシャ) |
100.00 |
North Carolina |
B (サーバー サブスクリプション) |
75.00 |
Idaho |
C (サーバー サブスクリプション) |
50.00 |
North Carolina |
D (クライアント サブスクリプション) |
0.00 |
Texas |
サイト B でパブリッシャと同期すると、更新の競合が発生します。サイト B および C は共にサーバー サブスクリプションで、サイト B の優先度はサイト C よりも高いため、サイト B の値が競合で優先されます。他の 2 つのサイトもマージされると、サイト B の値が他のサブスクライバに反映されます。
サイト | 優先度値 | 行の値 |
---|---|---|
A (パブリッシャ) |
100.00 |
Idaho |
B (サーバー サブスクリプション) |
75.00 |
Idaho |
C (サーバー サブスクリプション) |
50.00 |
Idaho |
D (クライアント サブスクリプション) |
0.00 |
Idaho |
フェーズ 4 : サーバー サブスクリプションを使用したサブスクライバおよびクライアント サブスクリプションを使用したサブスクライバの両方での行の更新
サイト D で行を「New Mexico」に変更し、パブリッシャと同期するとします。次に、サイト B で行を「California」に更新するとします。
サイト | 優先度値 | 行の値 |
---|---|---|
A (パブリッシャ) |
100.00 |
New Mexico |
B (サーバー サブスクリプション) |
75.00 |
California |
C (サーバー サブスクリプション) |
50.00 |
Idaho |
D (クライアント サブスクリプション) |
0.00 |
New Mexico |
サイト B でパブリッシャと同期すると、更新の競合が発生します。前の例とは違い、サイト D ではクライアント サブスクリプションを使用しているため、同期に際してはパブリッシャ (サイト A) の優先度値が前提となります。サイト A の優先度はサイト B よりも高いため、競合でサイト B が優先から外され、最初にサイト D に入力された値が優先されます(サブスクライバ D よりも前にサブスクライバ B とサイト A が同期されると、サイト B が競合で優先されます)。サイト D の値が競合で優先されるのは、サイト D で更新された行のバージョンが最後に同期されてから、パブリッシャで変更を行っておらず、他の変更も受信していない場合です。サーバー サブスクリプションを使用したサブスクライバまたはクライアント サブスクリプションを使用した他のサブスクライバが先に同期されると、最も高い優先度、または「パブリッシャに最初に入ってきたものが優先される」という規則が適用されます。
全サイトで同期された後の最終的な値を次に示します。
サイト | 優先度値 | 行の値 |
---|---|---|
A (パブリッシャ) |
100.00 |
New Mexico |
B (サーバー サブスクリプション) |
75.00 |
New Mexico |
C (サーバー サブスクリプション) |
50.00 |
New Mexico |
D (クライアント サブスクリプション) |
0.00 |
New Mexico |
トポロジの同じレベルでサーバーとクライアント サブスクリプションを混合した場合、同期の順序と優先度値によって競合の結果が決まります。この最後に行った一連の更新は、注意が必要となることを示しています。3 つのサブスクライバの中でサブスクライバ D に最も低い優先度値が割り当てられていますが、最初にパブリッシャと同期している (パブリッシャのプロパティ値 100.00 に相当する) ため、その値が競合で優先されます。サイト D ではなくサイト C (優先度値 50.00 のサーバー サブスクリプション) で「New Mexico」と入力した場合、サイト B (優先度値 75.00 のサーバー サブスクリプション) の値が競合で優先され、結果の値は「California」になります。