合併式複寫概觀
合併式複寫與交易式複寫類似,通常以發行集資料庫物件和資料的快照集啟動。在「發行者」和「訂閱者」端所作的後續資料變更和結構描述修改可使用觸發程序進行追蹤。該「訂閱者」在連接到網路時會與「發行者」同步,並且在「發行者」與「訂閱者」之間交換自上次同步處理後進行過變更的所有資料列。
合併式複寫通常會在伺服器至用戶端環境中使用。合併式複寫適合於下列任何情況:
多個訂閱者可能會在不同時間更新相同的資料,並將這些變更傳播到發行者與其他訂閱者。
「訂閱者」需要接收資料、離線變更資料,稍後同步變更「發行者」和其他「訂閱者」。
每個訂閱者需要一個不同的資料分割。
可能會發生衝突,而在發生衝突時,您需要偵測與解決衝突的能力。
應用程式需要淨資料變更,而非對中繼資料狀態的存取。例如,如果資料列在「訂閱者」與「發行者」同步之前,於「訂閱者」端變更了五次,則該資料列只需在「發行者」端變更一次,以反映最終資料變更 (即第五次的值)。
合併式複寫允許各站台自發地工作,然後將更新合併到單一的統一結果。因為是在多個節點更新,所以相同的資料可能已由發行者和多個訂閱者更新。因此,合併更新時可能會發生衝突,而合併式複寫提供數個處理衝突的方法。
若要追蹤變更,合併式複寫 (和具有佇列更新訂閱的交易式複寫) 必須可以唯一地識別每個已發行資料表中的每個資料列。為了達成這項操作,合併式複寫會將此資料行 rowguid 新增至每個資料表,除非資料表已經擁有的資料行是包含 ROWGUIDCOL 屬性集的 uniqueidentifier 資料類型 (在此情況下將使用此資料行)。若從發行集卸除資料表,rowguid 資料行會遭到移除;若現有資料行用來進行追蹤,則不會移除資料行。篩選中不可包含複寫用來識別資料列的 rowguidcol。newid() 函數會做為 rowguid 資料行的預設值提供,不過客戶可以視需要為每個資料列提供 Guid。但是不要提供 00000000-0000-0000-0000-000000000000 這個值。
如需實作合併式複寫的詳細資訊,請參閱<設計和實作 (複寫)>。
如需涉及合併式複寫之常見狀況的詳細資訊,請參閱<在伺服器與用戶端之間複寫資料>。