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

SQL Server 複寫技術實戰指南:從核心概念到快照複寫逐步部署

     編輯:關於SqlServer

複寫核心架構:發行-訂閱模型

SQL Server 複寫採用 **發行者-散發者-訂閱者** 三角色架構,支援跨網路 (LAN/撥號/Internet)、異構資料庫 (Oracle/DB2/Access) 的資料分發與同步。

五大核心實體

實體 角色定義 關鍵職責
發行者 資料來源伺服器 定義發行集 (文章集合);追蹤交易式複寫的資料變更 (Log Reader Agent);儲存發行中繼資料
散發者 中轉站 (可獨立或共置) 儲存散發資料庫 (歷史交易/快照/中繼資料);執行散發代理程式/合併代理程式;本地/遠端散發者部署彈性
訂閱者 資料接收端 訂閱發行集 (非單篇文章);依類型推送/提取變更;可重新發行 (轉發)
發行集 邏輯相關文章的容器 一次部署多篇文章;設定快照/安全性/同步排程等共用屬性
文章 最小複寫單元 資料表/檢視/預存程序/函數/索引檢視;支援垂直篩選 (欄位)、水平篩選 (列/WHERE)

三大複寫類型選型指南

類型 機制 延遲 適用場景 限制
快照複寫 定期產生完整資料快照 (BCP/檔案) 全量覆寫訂閱端 高 (依排程) 資料量小、變更頻率低、需定期完整重置、異構訂閱者 大量資料頻寬/鎖定壓力大;訂閱端資料完全覆蓋
交易式複寫 Log Reader 讀取交易日誌 → 散發資料庫 → 散發代理套用至訂閱端 低 (秒級) 高一致性需求、OLTP 系統報表卸載、多訂閱者、異構發布 Schema 變更需特別處理;大量批次操作延遲風險
合併複寫 觸發器/系統資料表追蹤雙端變更 → 合併代理解決衝突 (優先級/自訂解析器) 中 (依同步排程) 離線/行動用戶、雙向更新、分支機構同步 衝突解決複雜;效能隨衝突率上升下降

快照複寫部署完整實戰步驟 (SQL Server 2000/2005 通用邏輯)

前置準備 (關鍵成功因素)

  1. 同帳號同密碼的 Windows 帳號: 發行者/訂閱者/散發者各建立同名帳號 (如 `repl_user`),加入 `Administrators` 群組,作為 SQL Agent 啟動帳號與快照資料夾存取身分。
  2. 共用快照資料夾: 發行者建立資料夾 (如 `D:\ReplSnapshot`),共用權限給 `repl_user` **完整控制**。UNC 路徑格式:`\\PublisherServer\ReplSnapshot`。
  3. SQL Server Agent 服務啟動帳號: 三台伺服器均設為 `repl_user`。
  4. 驗證模式: 企業管理器/SSMS → 伺服器屬性 → 安全性 → **SQL Server 和 Windows 驗證模式** (混合模式)。
  5. 伺服器註冊: 發行者/訂閱者互註冊 (SQL Server 驗證,`sa` 或 `repl_user`)。
  6. 別名設定 (僅 IP 連線時): 用戶端網路公用程式 → 別名 → TCP/IP → 伺服器名稱填 IP,指定埠號 (預設 1433)。

步驟一:設定散發者與發行者

-- 企業管理器/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. 完成

驗證複寫成功

  1. 複寫監視器 → 發行集 → 右鍵「檢視詳細資料」→ 代理程式狀態「成功」。
  2. 快照資料夾 `\\PublisherServer\ReplSnapshot\unc\__\` 下出現以時間命名的資料夾 (每分鐘一個)。
  3. 訂閱者端查詢資料表確認資料一致性。

常見坑點與最佳實踐

  • 防火牆/連接埠: TCP 1433 (資料庫)、TCP 139/445 (檔案共用 SMB)、UDP 1434 (Browser)。
  • 大型資料表初始化: 使用 `BACKUP/RESTORE` 或 `BCP` 手動初始化訂閱端,避免快照產生/傳輸/套用長時間鎖定發行端。
  • Schema 變更傳播: 2005+ 支援 `ALTER TABLE` 自動傳播;2000 需 `sp_repladdcolumn` 等程序。
  • 監控指標: `msdb..sysreplicationalerts`、複寫監視器「延遲」欄位、代理程式歷史記錄錯誤。
  • 安全性: 快照資料夾僅授權 `repl_user`;散發資料庫加密連線;發行存取清單 (PAL) 限制訂閱者。

總結

複寫是 SQL Server 內建的高可用/資料分發利器。快照複寫部署相對簡單,適合中小資料量、低頻同步場景。**前置帳號/權限/網路準備工作決定 80% 成敗**,正式環境務必先在測試環境完整演練含 Schema 變更、重新初始化、災難恢復的全生命週期操作。

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