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

SQL Server 三種複寫類型差異比較:交易、快照、合併

     編輯:關於SqlServer

複寫類型總覽

複寫類型核心機制延遲適用場景衝突處理
交易複寫發佈端異動即時傳遞至訂閱端,維持交易邊界與順序低 (秒級)OLTP 高頻異動、報表伺服器同步、異地備援單向寫入無衝突;雙向需對等複寫+衝突偵測
快照複寫特定時間點完整資料快照,定期重新產生並完整傳遞高 (依排程)資料量小、變動極低、初始化其他複寫、離線分析無衝突 (單向覆蓋)
合併複寫快照初始化 + 觸發器追蹤雙端變更,同步時雙向交換並解決衝突中 (依同步頻率)行動/離線應用、多地點獨立寫入、偶爾連線同步內建解決器 (優先級、時間戳、自訂邏輯)

詳細特性比較

交易複寫

  • 即時性:Log Reader Agent 讀取交易記錄 → 散發資料庫 → 散發代理推送/提取
  • 一致性:發佈內交易邊界保證,訂閱端應用順序與發佈端一致
  • 支援物件:資料表、檢視表、預存程序執行、UDF、結構描述變更
  • 限制:發佈端資料表需主鍵;不支援 TEXT/NTEXT/IMAGE (建議用 MAX 型別)

快照複寫

  • 簡單性:無需追蹤變更,Snapshot Agent 產生 BCP/原生格式檔案
  • 完整重整:每次同步皆為全量覆蓋,訂閱端資料表會被 Drop/Create 或 Truncate/Bulk Insert
  • 頻寬/時間:資料量大時耗時長、佔頻寬,適合離峰排程
  • 常用作為:交易/合併複寫的初始化機制

合併複寫

  • 雙向寫入:發佈端與訂閱端皆可獨立 INSERT/UPDATE/DELETE
  • 追蹤機制:觸發器記錄變更至系統資料表 (MSmerge_*)
  • 同步流程:合併代理比較雙端變更 → 偵測衝突 → 依解決器規則決定勝方 → 應用變更
  • 衝突解決器:
    • 預設:發佈端優先 (Server Wins)
    • 其他:訂閱端優先、時間戳較新者勝、自訂 COM/預存程序解決器
  • 篩選:參數化資料列篩選,訂閱端只取得相關子集

選型決策樹

  1. 是否需要雙向寫入?
    • 是 → 合併複寫 (或對等交易複寫 + 衝突偵測)
    • 否 → 繼續 2
  2. 資料量大小與變更頻率?
    • 資料量小 (<100MB)、變更極低、可接受定期全量 → 快照複寫
    • 資料量大、高頻異動、需近即時同步 → 交易複寫
  3. 訂閱端是否離線/行動裝置?
    • 是 → 合併複寫 (支援斷線操作、自動同步)
    • 否 → 交易複寫

混合部署架構

實務常組合使用:

  • 快照複寫 初始化訂閱端
  • 交易複寫 持續同步核心交易資料
  • 合併複寫 服務行動銷售/離線分支

結語

三種複寫各有核心定位:交易 = 即時單向、快照 = 定期全量、合併 = 雙向離線。理解業務需求的「寫入方向、延遲容忍度、離線需求、衝突可能性」,即可精準選型。複雜架構下組合部署更能發揮各自優勢。

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