SQL Server 複寫採用 **發行者-散發者-訂閱者** 三角色架構,支援跨網路 (LAN/撥號/Internet)、異構資料庫 (Oracle/DB2/Access) 的資料分發與同步。
| 實體 | 角色定義 | 關鍵職責 |
|---|---|---|
| 發行者 | 資料來源伺服器 | 定義發行集 (文章集合);追蹤交易式複寫的資料變更 (Log Reader Agent);儲存發行中繼資料 |
| 散發者 | 中轉站 (可獨立或共置) | 儲存散發資料庫 (歷史交易/快照/中繼資料);執行散發代理程式/合併代理程式;本地/遠端散發者部署彈性 |
| 訂閱者 | 資料接收端 | 訂閱發行集 (非單篇文章);依類型推送/提取變更;可重新發行 (轉發) |
| 發行集 | 邏輯相關文章的容器 | 一次部署多篇文章;設定快照/安全性/同步排程等共用屬性 |
| 文章 | 最小複寫單元 | 資料表/檢視/預存程序/函數/索引檢視;支援垂直篩選 (欄位)、水平篩選 (列/WHERE) |
| 類型 | 機制 | 延遲 | 適用場景 | 限制 |
|---|---|---|---|---|
| 快照複寫 | 定期產生完整資料快照 (BCP/檔案) 全量覆寫訂閱端 | 高 (依排程) | 資料量小、變更頻率低、需定期完整重置、異構訂閱者 | 大量資料頻寬/鎖定壓力大;訂閱端資料完全覆蓋 |
| 交易式複寫 | Log Reader 讀取交易日誌 → 散發資料庫 → 散發代理套用至訂閱端 | 低 (秒級) | 高一致性需求、OLTP 系統報表卸載、多訂閱者、異構發布 | Schema 變更需特別處理;大量批次操作延遲風險 |
| 合併複寫 | 觸發器/系統資料表追蹤雙端變更 → 合併代理解決衝突 (優先級/自訂解析器) | 中 (依同步排程) | 離線/行動用戶、雙向更新、分支機構同步 | 衝突解決複雜;效能隨衝突率上升下降 |
-- 企業管理器/SSMS 操作路徑:
-- 工具 → 複寫 → 設定發行者、訂閱者和散發者
-- 1. 選擇散發者 (本機或遠端)
-- 2. 指定散發資料庫名稱/路徑 (預設 distribution)
-- 3. **關鍵:指定快照資料夾** → 輸入 UNC 路徑 `\\PublisherServer\ReplSnapshot`
-- 4. 完成精靈 → 產生散發資料庫、複寫監視器
-- 工具 → 複寫 → 建立和管理發行集
-- 1. 選擇發行資料庫
-- 2. 建立發行集 → 快照發行集 (預設)
-- 3. 允許訂閱者類型:SQL Server 2000/2005 (異構選 Oracle/Access)
-- 4. 選擇文章:資料表/檢視/預存程序 → 可設定垂直/水平篩選
-- 5. 快照代理程式排程:預設即時產生,建議設定每日離峰時段
-- 6. 完成 → 資料庫標記為已發行
-- 訂閱者端:工具 → 複寫 → 提取訂閱
-- 1. 選擇發行者 → 發行集
-- 2. 目的資料庫 (新建或現有)
-- 3. 同步排程:建議「持續執行 - 每分鐘」或業務接受度內最短間隔
-- 4. 初始化:立即建立快照並套用
-- 5. 完成
複寫是 SQL Server 內建的高可用/資料分發利器。快照複寫部署相對簡單,適合中小資料量、低頻同步場景。**前置帳號/權限/網路準備工作決定 80% 成敗**,正式環境務必先在測試環境完整演練含 Schema 變更、重新初始化、災難恢復的全生命週期操作。