若要瞭解衝突如何根據指派的優先順序值解決,以及訂用帳戶是伺服器還是用戶端訂用帳戶,請考慮下列範例,其中描述在數個合併同步處理中對資料列進行一系列更新。
以下是基本合併式複寫拓撲中四個站點的初始優先值:一個發行者、兩個具有伺服器訂閱的訂閱者,以及一個具有用戶端訂閱的訂閱者。
| 網站 | 類型 | 優先級值 |
|---|---|---|
| A | 發行人 | 100.00 |
| B | 伺服器訂閱 | 75.00 (已分配) |
| C | 伺服器訂閱 | 50.00 (已分配) |
| D | 客戶訂閱 | 0.00 (預設值) |
第一階段:初始值
最初,站台 A (發佈者) 會建立包含 value='Nebraska' 的資料列的版本 1,該版本會在下一次合併同步期間複製到站台 B、C 和 D。 同步處理之後,以下是資料列的值。
| 網站 | 類型 | 列值 |
|---|---|---|
| A(發行商) | 100.00 | 內布拉斯加州 |
| B(伺服器訂閱) | 75.00 | 內布拉斯加州 |
| C(伺服器訂閱) | 50.00 | 內布拉斯加州 |
| D(客戶訂閱) | 0.00 | 內布拉斯加州 |
階段 2:具有伺服器訂用帳戶的發佈者和訂閱者都會更新資料列
站台 A 會將列值更新為德州,而站台 B 會將列值更新為新澤西州。 當下一次合併同步處理發生時,網站 A 和 B 之間會發生衝突,網站 A 會贏得衝突。 站點 A 的衝突解決的結果值會傳播到站點 B、C 和 D。
| 網站 | 優先級值 | 列值 |
|---|---|---|
| A(發行商) | 100.00 | 德克薩斯州 |
| B(伺服器訂閱) | 75.00 | 德克薩斯州 |
| C(伺服器訂閱) | 50.00 | 德克薩斯州 |
| D(客戶訂閱) | 0.00 | 德克薩斯州 |
階段 3:對同一列所做的多項變更
假設網站 C 更新資料列 (將它變更為北卡羅來納州) ,並與發行者同步處理。 這不是衝突,因為 C 已經成功合併了 A 的最後一個更新(行值='Texas' 已成功合併)。 然後假設網站 B 更新資料列 (將其變更為愛達荷州)。
| 網站 | 優先級值 | 資料列值 |
|---|---|---|
| A(發行商) | 100.00 | 北卡羅來納州 |
| B(伺服器訂閱) | 75.00 | 愛達荷州 |
| C(伺服器訂閱) | 50.00 | 北卡羅來納州 |
| D(客戶訂閱) | 0.00 | 德克薩斯州 |
當網站 B 與發行者同步處理時,會發生更新衝突。 因為 B 和 C 都是伺服器訂閱,而且 B 的優先順序大於 C 的優先順序,所以站台 B 會贏得衝突。 在另外兩個網站也合併之後,B 的值會傳播到其他訂閱者。
| 網站 | 優先級值 | 資料列值 |
|---|---|---|
| A(發行商) | 100.00 | 愛達荷州 |
| B(伺服器訂閱) | 75.00 | 愛達荷州 |
| C(伺服器訂閱) | 50.00 | 愛達荷州 |
| D(客戶訂閱) | 0.00 | 愛達荷州 |
階段 4:伺服器和用戶端訂閱的訂閱者都會更新資料列
假設網站 D 更新資料列 (將其變更為新墨西哥州) 並與發行者同步。 然後假設站台 B 更新了該列(將其更改為加利福尼亞州)。
| 網站 | 優先級值 | 資料列值 |
|---|---|---|
| A(發行商) | 100.00 | 新墨西哥州 |
| B(伺服器訂閱) | 75.00 | 加州 |
| C(伺服器訂閱) | 50.00 | 愛達荷州 |
| D(客戶訂閱) | 0.00 | 新墨西哥州 |
當網站 B 與發佈者同步時,會發生更新衝突。 與上一個範例不同,由於 D 具有用戶端訂閱,因此在同步處理時會假設發行者 (網站 A) 的優先順序值。 因為A的優先級大於B,所以B輸了衝突;最初輸入 D 的值獲勝。 (如果訂閱者 B 在訂閱者 D 之前與 A 同步,那麼站 B 就會贏得衝突)。站 D 贏得衝突取決於自上次在站 D 同步更新資料列版本後,發佈者未進行變更或未收到其他變更。 如果任何具有伺服器訂用帳戶的訂閱者或任何其他具有用戶端訂用帳戶的訂閱者先同步處理,則會遵循最高優先順序或「先到發布者優先」的規則。
此處顯示所有站台同步處理後的最終值。
| 網站 | 優先級值 | 資料列值 |
|---|---|---|
| A(發行商) | 100.00 | 新墨西哥州 |
| B(伺服器訂閱) | 75.00 | 新墨西哥州 |
| C(伺服器訂閱) | 50.00 | 新墨西哥州 |
| D(客戶訂閱) | 0.00 | 新墨西哥州 |
同步順序和優先值會決定在拓撲中相同層級的伺服器和用戶端訂閱混合時的衝突結果。 最後一組更新說明了為什麼必須謹慎行事。 雖然訂閱者的優先順序值是三個訂閱者中最低的,但它贏得了衝突,因為它先與發行者同步處理 (因此假設發行者優先順序值為 100.00)。 如果站台 C(優先級值為 50.00 的伺服器訂閱)進入新墨西哥州而不是站點 D,則站台 B(優先級值為 75.00 的伺服器訂閱)將贏得衝突,結果將是加利福尼亞州。