首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

MS SQL 基礎教學:合併複寫架構、衝突偵測與同步流程完整解析

     編輯:關於SqlServer

合併複寫專為離線/分散式更新設計(如銷售人員筆記本電腦)。本文系統解析:1) 架構特色:發布者/訂閱者均可獨立修改、無需持續連線、定期同步合併變更、衝突依規則解決(非發布者勝)、不保證交易一致性(最終一致);2) 系統物件建立:rowguid 唯一識別欄位、追蹤觸發器 (INSERT/UPDATE/DELETE) → MSmerge_contents/MSmerge_tombstone 系統表記錄世代;3) 同步流程:快照代理初始化 → 合併代理交換世代 (generation=0 為變更) → 衝突偵測 → 依規則解決(預設/自訂存儲程序/COM 解決器)。附圖解系統表結構。

合併複寫核心特性

  • 多主更新:所有節點可讀寫,適合離線分支機構/行動人員。
  • 世代追蹤:每筆變更標記世代號,同步時僅交換新世代,效率高。
  • 衝突解決:資料列/資料行級偵測,規則:發布者勝、訂閱者勝、較早/較晚時間戳、自訂解決器 (COM/預存程序)。
  • 最終一致性:非交易一致,同步完成後所有節點收斂相同結果。

系統物件自動建立

  1. rowguid (uniqueidentifier, ROWGUIDCOL) 唯一識別每列跨複本身分。
  2. 觸發器捕捉 DML 寫入 MSmerge_contents (更新/插入) 與 MSmerge_tombstone (刪除)。
  3. 衝突記錄於 MSmerge_conflict__
    表。

合併複寫系統表結構

同步四階段

  1. 快照代理建立初始同步集合,合併代理分發初始化訂閱者。
  2. 節點修改觸發器標記世代=0,合併代理收集重新編號世代。
  3. 合併代理將新世代傳送至所有參與同步節點。
  4. 目標節點合併變更,衝突偵測 → 規則解決 → 寫入最終結果。

合併複寫是離線/分散式資料同步的標準解決方案,需精心設計衝突規則與同步排程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved