首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 資料庫同步複寫完整部署指南 (發佈/訂閱模式)

     編輯:關於SqlServer

前言

SQL Server 複寫 是跨伺服器同步資料的成熟技術,支援快照、交易、合併三種模式。本文詳細說明複寫拓撲角色、前置條件、精靈式部署步驟 (發佈者/散發者/訂閱者)、推式/提取式訂閱選擇、常見問題排解,適用於 SQL Server 2000/2005/2008/2012/2014/2016/2017/2019/2022。

一、複寫拓撲三大角色

角色比喻職責
發佈者出版社定義發行什麼資料 (文章)、來源資料庫。
散發者郵差儲存交易/快照、傳遞給訂閱者。可與發佈者同機或獨立。
訂閱者讀者接收並套用資料變更。

二、前置條件 (必須逐項確認)

  1. 復原模式 = 完整 (FULL):資料庫屬性 → 選項 → 復原模式 → 完整。
  2. 所有發行資料表必須有主鍵:交易式複寫強制要求;無主鍵請加 ID INT IDENTITY(1,1) PRIMARY KEY。
  3. 伺服器註冊使用電腦名稱:SSMS 註冊時勿用 IP、localhost、(local)、. 等別名;跨網段需在 C:\Windows\System32\drivers\etc\hosts 設定 IP 對應。
  4. SQL Server Agent 服務啟動且使用本機系統管理員帳號:服務 → SQLSERVERAGENT → 登入身分 → 本機帳號 (Administrator 群組)。
  5. 建立同名 Windows 帳號、同密碼:用於快照資料夾存取、Agent 服務登入、散發者/訂閱者連線驗證。
  6. 建立共用快照資料夾:如 \\Publisher\ReplSnapshot,授予上述 Windows 帳號完整控制權限。
  7. 驗證模式 = SQL Server 和 Windows 混合模式:執行個體屬性 → 安全性。

三、複寫類型選擇指南

類型適用場景關鍵特性
快照式資料量小、變動極低、允許延遲、定時全量重整簡單、不需主鍵、每次全量覆寫、Identity 屬性不傳遞
交易式高頻異動、需低延遲同步、伺服器對伺服器、需存取中間狀態增量傳遞、保證交易一致性、需主鍵、Identity 可選傳遞
合併式行動/離線用戶、多點雙向寫入、需衝突偵測解決離線操作、後續同步、衝突解決器、資料分區、最終一致性

四、部署步驟:發佈者 + 散發者 (同機)

  1. SSMS → 複寫 → 右鍵「設定散發」→ 精靈。
  2. 散發者:選「本身做散發者」。
  3. 快照資料夾:輸入 UNC 路徑 \\Publisher\ReplSnapshot (非本機路徑)。
  4. 散發資料庫:接受預設 distribution 或自訂名稱/路徑。
  5. 啟用發佈者:勾選目前伺服器。
  6. 完成精靈,複寫監視器會出現在 SSMS 物件總管。

五、建立發行集

  1. 複寫 → 右鍵「新增發行集」→ 選擇來源資料庫。
  2. 選擇複寫類型 (快照/交易/合併)。
  3. 訂閱者類型:通常選「SQL Server 2005 或更新版本」。
  4. 選擇文章:勾選資料表、檢視、預存程序、函數;可設定篩選 (垂直/水平)。
  5. 快照代理程式排程:立即產生 + 定期重整 (如每日凌晨)。
  6. 安全性:快照代理、記錄讀取代理、散發代理分別設定執行帳號 (使用前置建立的 Windows 帳號)。
  7. 完成,發行集建立成功,來源資料庫圖示變為「手托資料庫」。

六、建立訂閱

推式訂閱 (由發佈者/散發者主動推送)

  • 適用:訂閱者無公網 IP、或希望散發者掌控同步時機。
  • 操作:發佈者 SSMS → 發行集右鍵「新增訂閱」→ 選訂閱者 → 訂閱資料庫 (新建或既有) → 散發代理排程 (連續/定期) → 初始化 (立即/排程) → 完成。

提取式訂閱 (由訂閱者主動提取)

  • 適用:減輕散發者負載、訂閱者有公網 IP、跨網域/防火牆較易控制出站連線。
  • 操作:在訂閱者 SSMS → 複寫 → 本機訂閱右鍵「新增訂閱」→ 指定發佈者/發行集 → 後續步驟同推式。

七、常見問題排解

現象可能原因對策
快照代理失敗「存取被拒」快照資料夾權限不足檢查 UNC 路徑、Windows 帳號權限、防火牆 445 埠
記錄讀取代理「找不到資料庫」資料庫非完整復原模式、或已卸離確認復原模式、重新建立發行集
散發代理「無法連線訂閱者」訂閱者 IP/埠/防火牆、SQL Browser 服務未啟動測試 SSMS 連線、開啟 1433/動態埠、啟動 SQL Browser
交易式複寫「主鍵違規」訂閱者已有相同 PK 資料、或雙向寫入衝突重新初始化訂閱、檢查身分插入設定、改用合併式
Identity 欄位不同步快照式不傳遞 Identity 屬性改用交易式並勾選「傳遞 Identity 欄位」

八、監控與維護

  • 複寫監視器:即時查看各代理狀態、延遲、錯誤、歷程記錄。
  • 代理程式警示:設定 SQL Server Agent 警示 (如代理停止、延遲超過閾值) 發送郵件通知。
  • 定期驗證:sp_publication_validation、sp_article_validation、資料列計數比對。
  • 清理歷史記錄:散發資料庫 distribution 設定保留期限 (預設 48 小時/72 小時),避免無限增長。

九、替代方案簡評

  • AlwaysOn 可用性群組:高可用 + 讀取延伸,非異構同步首選。
  • 異地複寫 / Azure SQL Data Sync:跨雲/混合雲場景。
  • CDC + Kafka / Debezium:即時資料串流、微服務架構。
  • SSIS / Azure Data Factory:批次 ETL、異構資料整合。

結語

SQL Server 複寫功能強大但設定繁瑣。嚴格落實前置條件、選對複寫類型、善用精靈與監視器、建立告警與驗證機制,即能建立穩定可靠的跨伺服器資料同步管道。隨著雲原生架構演進,評估現代替代方案 (CDC、可用性群組、資料串流) 亦為長遠規劃關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved