複寫衝突偵測與解決
經過初始同步處理之後,每當發生同步處理時,在一個訂閱者所做的資料變更,可能會與不同訂閱者或發行者所進行的變更發生衝突。建立發行集時,您會指派解析程式處理這些衝突。
偵測衝突
發生同步處理的時候,在發行者上執行的合併代理程式會偵測到任何資料衝突,然後根據和此發行集相關聯的解析程式,決定哪個資料要加以接受並傳播到其他網站。
Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) 在與 SQL Server 2005 發行者進行同步處理時,會同時支援資料列層級與資料行層級追蹤。與 SQL Server 2000 發行者進行同步處理的時候,SQL Server Compact Edition 只支援資料列層級追蹤。
SQL Server Compact Edition 中的資料列層級追蹤
與「SQL Server 2000 發行者」進行同步處理的時候,只要插入、更新或刪除任何資料列,SQL Server Compact Edition Database Engine 就會叫用追蹤。在資料列層級偵測衝突的時候,無論是否變更同一資料行,針對對應資料列所進行的變更都會被視為衝突。例如,在發行者端針對資料列的地址資料行進行變更同時,訂閱者端針對對應資料列的電話號碼資料行進行另一項變更。若使用資料列層級追蹤,就會偵測到一個衝突,這是因為同一資料列發生變更。
附註: |
---|
即使已使用資料行層級追蹤設定 SQL Server 2000 發行者,SQL Server Compact Edition 仍然會標示此資料列,就好像每個資料行都已經變更。只有 SQL Server 2005 發行者才支援資料行層級追蹤。 |
使用解析程式
偵測到衝突之後,合併代理程式就會啟動選取給此發行項的衝突解析程式。這可能是預設解析程式、其他供應的解析程式之一,或是自訂解析程式。接受的變更會根據衝突解析程式的規則加以選擇。SQL Server Compact Edition 訂閱者的衝突都會在發行者端加以偵測、解析及記錄。
重要事項: |
---|
多使用者存取現在允許同步處理期間的資料變更。這些變更可能會導致用戶端的衝突。用戶端的衝突會在訂閱者端進行偵測,但不會加以解決。在下次同步處理期間,發行者端會重新偵測並解決衝突。如需詳細資訊,請參閱<多使用者存取及同步處理>。 |
解析程式可以使用資料變更的來源 (或是訂閱者的優先順序值) 來解決衝突。例如,預設解析程式遵守此規則:發行者上的變更一律會覆寫訂閱者上的變更。您可以選擇使用另一個不同的解析程式,讓它總是偏好訂閱者的變更,而不偏好發行者的變更。
附註: |
---|
SQL Server Compact Edition 用戶端的優先順序值一律為 0。因此,根據優先順序值的解析程式不會將優先權給予在裝置上所進行的變更。 |
如需衝突偵測及解決的詳細資訊,請參閱《SQL Server 線上叢書》的<合併式複寫衝突偵測及解決>。
附註: |
---|
SQL Server Compact Edition 訂閱不支援基於預存程序的合併式衝突解析程式。 |
使用自訂解析程式
自訂解析程式允許新增商務邏輯到複寫。自訂解析程式是一個以 Managed 程式碼或機器碼建構的 DLL。若要使用自訂解析程式,必須使用 sp_registercustomeresolver 預存程序登錄在發行者上以及執行 IIS 的伺服器上。sp_registercustomeresolver 預存程序包括 is_dotnet_assembly 參數,您可以將其設定為 True 表示解析程式以 Managed 程式碼建立,或設定為 False 表示原生 DLL。
重要事項自訂解析程式除了要在執行 SQL Server 的電腦上登錄之外,也必須在執行 IIS 的電腦上登錄。