複寫類型總覽
| 複寫類型 | 核心機制 | 延遲 | 適用場景 | 衝突處理 |
| 交易複寫 | 發佈端異動即時傳遞至訂閱端,維持交易邊界與順序 | 低 (秒級) | OLTP 高頻異動、報表伺服器同步、異地備援 | 單向寫入無衝突;雙向需對等複寫+衝突偵測 |
| 快照複寫 | 特定時間點完整資料快照,定期重新產生並完整傳遞 | 高 (依排程) | 資料量小、變動極低、初始化其他複寫、離線分析 | 無衝突 (單向覆蓋) |
| 合併複寫 | 快照初始化 + 觸發器追蹤雙端變更,同步時雙向交換並解決衝突 | 中 (依同步頻率) | 行動/離線應用、多地點獨立寫入、偶爾連線同步 | 內建解決器 (優先級、時間戳、自訂邏輯) |
詳細特性比較
交易複寫
- 即時性:Log Reader Agent 讀取交易記錄 → 散發資料庫 → 散發代理推送/提取
- 一致性:發佈內交易邊界保證,訂閱端應用順序與發佈端一致
- 支援物件:資料表、檢視表、預存程序執行、UDF、結構描述變更
- 限制:發佈端資料表需主鍵;不支援 TEXT/NTEXT/IMAGE (建議用 MAX 型別)
快照複寫
- 簡單性:無需追蹤變更,Snapshot Agent 產生 BCP/原生格式檔案
- 完整重整:每次同步皆為全量覆蓋,訂閱端資料表會被 Drop/Create 或 Truncate/Bulk Insert
- 頻寬/時間:資料量大時耗時長、佔頻寬,適合離峰排程
- 常用作為:交易/合併複寫的初始化機制
合併複寫
- 雙向寫入:發佈端與訂閱端皆可獨立 INSERT/UPDATE/DELETE
- 追蹤機制:觸發器記錄變更至系統資料表 (MSmerge_*)
- 同步流程:合併代理比較雙端變更 → 偵測衝突 → 依解決器規則決定勝方 → 應用變更
- 衝突解決器:
- 預設:發佈端優先 (Server Wins)
- 其他:訂閱端優先、時間戳較新者勝、自訂 COM/預存程序解決器
- 篩選:參數化資料列篩選,訂閱端只取得相關子集
選型決策樹
- 是否需要雙向寫入?
- 是 → 合併複寫 (或對等交易複寫 + 衝突偵測)
- 否 → 繼續 2
- 資料量大小與變更頻率?
- 資料量小 (<100MB)、變更極低、可接受定期全量 → 快照複寫
- 資料量大、高頻異動、需近即時同步 → 交易複寫
- 訂閱端是否離線/行動裝置?
- 是 → 合併複寫 (支援斷線操作、自動同步)
- 否 → 交易複寫
混合部署架構
實務常組合使用:
- 快照複寫 初始化訂閱端
- 交易複寫 持續同步核心交易資料
- 合併複寫 服務行動銷售/離線分支
結語
三種複寫各有核心定位:交易 = 即時單向、快照 = 定期全量、合併 = 雙向離線。理解業務需求的「寫入方向、延遲容忍度、離線需求、衝突可能性」,即可精準選型。複雜架構下組合部署更能發揮各自優勢。