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

SQL Server 複寫技術深度解析:兩台伺服器資料同步完整方案

     編輯:關於SqlServer

複寫核心概念

角色說明
發行者資料來源,發布資料變更
散發者暫存變更命令,含散發資料庫
訂閱者接收變更的目標伺服器
發行集一組文章的邏輯容器
文章具體同步單位:資料表/檢視表/預存程序執行結果

三種複寫類型選型指南

類型延遲一致性頻寬適用場景
快照式高 (排程間隔)最終一致大 (全量)資料量小、變更頻率低、報表/唯讀訂閱
交易式低 (秒級)交易一致中 (增量命令)OLTP 高可用、即時同步、異構訂閱
合併式可配置最終一致 (衝突解析)中離線/行動用戶端、雙向寫入

快照式複寫手把手建立 (EM 圖形化)

步驟 1:設定發行者/散發者

  1. 工具 → 複寫 → **設定發行者、訂閱者和散發者**
  2. 嚮導完成後,伺服器樹出現「複寫監視器」,自動建立 distribution 資料庫

步驟 2:建立發行集

  1. 工具 → 複寫 → **建立和管理發行集**
  2. 選資料庫 → **建立發行集** → 類型選 **快照式發行集**
  3. 訂閱者類型選 **SQL Server 2000**
  4. 選文章 (資料表) → 完成嚮導

步驟 3:建立訂閱 (Pull 訂閱)

  1. 在**訂閱者**伺服器:工具 → 複寫 → **要求訂閱**
  2. 選發行者/發行集 → 確認 Agent 服務已啟動 → 完成

驗證同步成功

  • 複寫監視器 → 發行集 → 右鍵 **啟動代理程式** → 檢視狀態「成功」
  • 排程設為 **每分鐘執行** (0:00-23:59)
  • 檢查 C:\Program Files\Microsoft SQL Server\MSSQL\REPLDATA\unc\... 產生時間命名資料夾
  • 訂閱者資料庫確認文章資料表已出現

手工同步替代方案:Linked Server + 排程作業

適合**不想用複寫基礎設施**、需自訂邏輯 (過濾、轉換、錯誤重試) 的場景。

核心邏輯:變更追蹤 + MERGE/UPSERT

-- 來源端:建立變更表 (觸發器填充)
CREATE TABLE dbo.ChangeLog (
    TableName  SYSNAME,
    PKValue    VARCHAR(100),
    OpType     CHAR(1),  -- I/U/D
    ChangeTime DATETIME DEFAULT GETDATE()
);

-- 目的端:排程作業讀取 ChangeLog 執行同步
-- 使用 MERGE (2008+) 或 LEFT JOIN + INSERT/UPDATE/DELETE

優缺點對比

維度複寫手工同步
部署複雜度高 (需散發者、Agent、權限)低 (Linked Server + Job)
延遲交易式可達秒級取決於 Job 排程 (通常分鐘級)
Schema 變更傳播自動 (DDL 複寫)需手工同步 DDL
衝突處理合併式內建解析器需自行實作
監控/重試複寫監視器、代理程式警示需自建監控

常見問題排查

  • Agent 服務未啟動:SQL Server Agent 必須運行,代理程式才能執行。
  • 權限不足:散發者/訂閱者需具備 db_owner 或特定複寫角色權限。
  • 快照代理程式失敗:檢查磁碟空間、快照資料夾權限、大物件 (text/image) 處理。
  • 交易式複寫延遲暴增:sp_replmonitorsubscriptionpendingcmds 檢查積壓命令數;優化訂閱端索引、批次大小、平行處理。

結語

SQL Server 複寫提供企業級同步框架:**快照式適合唯讀報表、交易式適合高可用/即時同步、合併式適合離線雙向**。若基礎設施受限或需高度自訂邏輯,Linked Server + 變更追蹤 + 排程作業是輕量替代方案。選型核心:**業務容忍延遲、雙向寫入需求、Schema 變更頻率、運維能力**。

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