複寫功能可將資料與資料庫物件從一個資料庫複製並分發到另一個資料庫,並實現同步。分為三種核心類型:
機制:定期將發行端完整資料覆寫至訂閱端(先刪除再插入)。
適用:資料量小、變動頻率低、允許高延遲的場景(如報表資料庫)。
缺點:頻寬佔用大、鎖定久、不支援增量同步,不適合高頻交易系統。
機制:擷取交易記錄檔中的異動,透過三個預存程序(插入/刪除/更新)套用至訂閱端,近乎即時。
可客製化:可改寫這三個預存程序以符合業務邏輯。
致命缺陷:雙向複寫的「踢皮球」循環:若 A→B 與 B→A 條件相同,A 的異動傳到 B,B 再傳回 A,形成無限迴圈。
解決方向:使用「標記欄位」區分來源、或採用合併式複寫、或設計單向複寫拓撲。
機制:定期將雙端資料合併,以優先權解決主鍵衝突。SQL Server 會在每個複寫資料表自動加入 rowguid 唯一識別欄位。
注意:開發時務必考慮此隱藏欄位,避免 SELECT * 導致前端錯誤。
兩大缺陷:
結論:合併式複寫不適合結構頻繁變動的資料表。
| 需求 | 推薦類型 | 關鍵考量 |
|---|---|---|
| 單向、近即時、高吞吐 | 交易式 | 避免雙向循環、監控延遲 |
| 雙向/多點、離線同步 | 合併式 | 處理衝突邏輯、監控代理狀態、避免 DDL 變更 |
| 資料量小、定期全量重整 | 快照式 | 維護窗口足夠、不需增量 |