複寫核心角色
- 發行者:來源資料庫,決定發行何種物件 (發行項/文章)。
- 散發者:中繼站,儲存散發資料庫、執行代理程式、傳遞變更。
- 訂閱者:目的端,接收並套用變更,可再作為其他訂閱者的發行者。
單一伺服器可同時扮演多角色,生產環境建議**散發者獨立部署**降低發行者負載。
訂閱類型
- 推播訂閱:散發者主動推送變更至訂閱者,低延遲、高一致性要求。
- 提取訂閱:訂閱者定期輪詢散發者拉取變更,適合行動/離線/頻寬受限環境。
四大代理程式職責
| 代理程式 | 執行位置 | 支援複寫類型 | 核心職責 |
| 快照集代理程式 | 散發者 | 所有 | 產生結構描述/資料快照檔案、記錄同步資訊 |
| 記錄讀取代理程式 | 散發者 | 交易式 | 讀取發行者記錄檔、標記待複寫交易移至散發資料庫 |
| 散發代理程式 | 散發者(推播) / 訂閱者(提取) | 快照/交易式 | 套用快照、將散發資料庫交易遞送至訂閱者 |
| 合併代理程式 | 散發者(推播) / 訂閱者(提取) | 合併式 | 套用快照、雙向同步增量變更、衝突偵測解決 |
| 佇列讀取代理程式 | 散發者 | 交易式(佇列更新) | 將訂閱者佇列更新回寫發行者 |
三大複寫類型深度比較
| 類型 | 機制 | 延遲 | 適用場景 | 限制 |
| 快照式 | 定時全量覆寫 | 高 (視資料量) | 資料量小、變更少、固定排程 | 大量資料頻寬/時間成本高 |
| 交易式 | 記錄檔增量遞送 | 低 (秒級) | 高一致性、近即時、單向寫入 | 需穩定網路、訂閱者通常唯讀 |
| 合併式 | 雙向增量 + 觸發器/GUID 追蹤 | 視同步頻率 | 行動/離線/雙向寫入、衝突解決 | 每張表需 PK + ROWGUIDCOL、觸發器開銷 |
部署實戰:快照式複寫 (發行者=散發者=Server1,訂閱者=Server2)
- Server1:SSMS →「複寫」→「本地發行集」→「新增發行集」→ 選資料庫 DB1 → 選「快照式發行集」→ 指定快照資料夾 → 設定代理程式安全性 (Windows 帳號) → 完成。
- Server2:SSMS →「複寫」→「本地訂閱」→「新增訂閱」→ 選發行者 Server1 → 選「推播訂閱」→ 指定目標資料庫 → 設定散發代理程式安全性 → 同步排程「持續執行」或定時。
- 驗證:Server1 DB1 插入資料 → 秒級出現在 Server2 對應資料表。
常見坑點與解決
效能調優建議
- 散發資料庫置於獨立磁碟/陣列,啟用瞬間檔案初始化。
- 交易式:調整
-PollingInterval、-CommitBatchSize、-CommitBatchThreshold 參數平衡延遲與吞吐。
- 合併式:適當調整同步排程、啟用壓縮快照、監控衝突率。