以伺服器 A、B 雙向複寫為例說明。
機制:定期將發佈端完整資料複製至訂閱端(先刪除再插入)。
缺點:資料量大時耗時長、鎖定久、頻寬佔用高、無增量能力。不適合高頻變動、大資料量、低延遲需求場景。
機制:發佈端交易記錄掃描代理讀取符合條件的交易,透過散發者以三個預存程序(sp_MSins_, sp_MSupd_, sp_MSdel_)應用至訂閱端。可自訂這三個程序實現業務邏輯。
致命缺陷:迴路複寫。若 A→B 與 B→A 篩選條件相同,A 的交易複寫到 B,B 再複寫回 A,形成無限迴路(踢皮球)。
解決:使用 @loopback_detection、設定不同篩選條件、或採用合併式複寫。
機制:定期雙向合併變更,最終雙端資料一致。衝突依優先級解決(保留一方)。
關鍵點:SQL Server 自動在每張發行表新增 rowguid (uniqueidentifier) 與 msrepl_tran_version 欄位追蹤變更,開發時需注意:
INSERT 必須提供 rowguid 或讓預設值 NEWID() 產生。sp_repladdcolumn 等複寫專用程序。| 場景 | 推薦類型 | 理由 |
|---|---|---|
| 唯讀報表、資料倉儲同步、低頻更新 | 快照複寫 | 簡單、無衝突、可接受延遲 |
| 高頻 OLTP、單向發佈、低延遲、需自訂邏輯 | 交易式複寫 | 近即時、效能佳、支援預存程序自訂 |
| 多端點雙向寫入、離線作業、衝突解決 | 合併式複寫 | 支援離線、雙向、衝突優先級 |