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

SQL Server 2005 交易式複寫完整部署指南:同步複寫技術實戰

     編輯:SQL Server 2005

SQL Server 2005 交易式複寫 可將資料變更近即時傳遞至訂閱端,適用於報表伺服器卸載、異地災備、多站點同步等場景。本文涵蓋前置需求 (帳戶、連通性、共享資料夾、SQL Agent 設定、防火牆、網路協議)、發布/訂閱精靈操作步驟、快照代理設定、常見錯誤排查 (命名管道/TCP/IP、IP 連線失敗) 及快速驗證腳本。

前置準備 (雙端皆需)

1. 建立專用 Windows 帳戶

  • 帳戶名:repl_agent (範例)
  • 加入本機 Administrators** 群組
  • 設定強式密碼,密碼永不過期

2. 網路連通性

  • 雙向 Ping 通、telnet IP 1433 通
  • 防火牆開放 1433 (TCP)**、1434 (UDP)**、445 (SMB/共享資料夾)**
  • SQL Server Configuration Manager → 網路設定 → 啟用 TCP/IP、Named Pipes**,重啟服務

3. 快照共享資料夾 (發布端)

  • 建立資料夾:D:\ReplSnapshot
  • 共享權限:Everyone: 讀取、repl_agent: 讀取/寫入
  • NTFS 權限:同步給 repl_agent 完整控制
  • UNC 路徑:\\PublisherServer\ReplSnapshot

4. SQL Server Agent 服務帳戶設定

  • 服務管理器 → SQL Server Agent → 內容 → 登入
  • 選「此帳戶」 → 輸入 repl_agent 及密碼
  • 雙端 (發布/訂閱) 同步設定

5. 驗證模式設為混合模式

  • SSMS 右鍵實例 → 內容 → 安全性 → SQL Server 和 Windows 驗證模式**
  • 重啟 SQL Server 服務

6. 建立 SQL 登入對應 Windows 帳戶

CREATE LOGIN [DOMAIN\repl_agent] FROM WINDOWS;
-- 或 SQL 登入
CREATE LOGIN repl_agent WITH PASSWORD = 'StrongPass123!';
-- 授予發布資料庫 db_owner
USE PublishDB;
CREATE USER repl_agent FOR LOGIN repl_agent;
EXEC sp_addrolemember 'db_owner', 'repl_agent';

7. 雙向註冊伺服器 (SSMS 註冊伺服器)

  • 檢視 → 註冊的伺服器 → 右鍵資料庫引擎 → 新增伺服器註冊
  • 驗證:SQL Server 驗證 / sa / 密碼

8. IP 連線無法解析主機名時:建立伺服器別名

  • SQL Server Configuration Manager → SQL Native Client 設定 → 別名 → 新增別名
  • 別名:PublisherAlias,伺服器:IP 位址,通訊協定:TCP/IP,連接埠:1433

發布端設定 (發布 + 訂閱一次完成)

1. 設定散發者

  • SSMS → 複寫 → 右鍵 本機發布** → 設定散發**
  • 散發者:本機 (或遠端專用散發者)
  • 快照資料夾:\\PublisherServer\ReplSnapshot
  • 散發資料庫:預設 distribution
  • 完成精靈

2. 建立發布

  • 右鍵 本機發布** → 新增發布**
  • 發布資料庫:選擇目標資料庫
  • 發布類型:交易式發布** (Transactional Publication)
  • 發行項:勾選需同步的資料表 (需有主鍵)
  • 篩選:視需求加入列/列篩選
  • 快照代理:立即建立快照**、排程依需求 (如每日 02:00)
  • 代理安全性:使用 SQL Server Agent 服務帳戶**、連接發布者用 repl_agent SQL 登入
  • 發布名稱:Pub_Transactional

3. 建立訂閱 (推送訂閱 - 發布端主動推送)

  • 右鍵 本機訂閱** → 新增訂閱**
  • 發布者:選擇發布伺服器
  • 發布:選擇 Pub_Transactional
  • 訂閱類型:推送訂閱** (發布端執行散發代理)
  • 訂閱者:輸入訂閱伺服器名稱/IP
  • 訂閱資料庫:選擇/建立目標資料庫
  • 代理排程:連續執行** (近即時) 或 定期 (如每 5 分鐘)
  • 初始化:立即** (使用快照)
  • 完成

常見錯誤與解決

錯誤:無法連接到 IP,命名管道提供者錯誤 233

無法連接到 10.114.x.x
已成功建立連接,但是在登入過程中發生錯誤。
(provider: 命名管道提供者, error: 0 - 管道的另一端上無任何進程。) (Microsoft SQL Server, 錯誤: 233)

解決

  • SQL Server Configuration Manager → SQL Server 網路設定 → MSSQLSERVER 協定
  • 啟用 Named Pipes 和 TCP/IP**
  • 重啟 SQL Server 服務

錯誤:快照代理失敗、權限不足

  • 確認 repl_agent 對共享資料夾有讀寫權限
  • 檢查散發代理作業歷程記錄詳細錯誤訊息

錯誤:主鍵衝突、資料類型不符

  • 發行項資料表 必須有主鍵
  • 發布/訂閱端結構完全一致 (含觸發器、條件約束、索引)

驗證複寫運作

-- 發布端插入測試資料
INSERT INTO PublishDB.dbo.TestTable (Col1, Col2) VALUES ('ReplTest', GETDATE());

-- 訂閱端查詢 (應在幾秒內出現)
SELECT * FROM SubscribeDB.dbo.TestTable WHERE Col1 = 'ReplTest';

-- 複寫監視器 (SSMS → 複寫 → 右鍵啟動複寫監視器)
-- 檢查:未散發命令數、延遲時間、代理狀態

複寫類型快速選擇

類型延遲適用場景雙向寫入
交易式秒級報表卸載、災備、單向同步否 (可用雙向交易式)
合併式排程離線用戶端、雙向同步、衝突解決是
快照式批次小資料量、定期重整、唯讀報表否
點對點秒級多主機雙向寫入、高可用是

維護建議

  • 定期監控 複寫監視器:延遲 < 30 秒、無錯誤、代理執行中
  • 設定警示:sp_add_alert 監控「複寫: 未散發命令數 > 閾值」
  • 定期重建索引、更新統計 (發布/訂閱端)
  • 大量異動 (如 ETL 載入) 時暫停散發代理,完成後再啟動
  • 備份散發資料庫 distribution、發布資料庫、訂閱資料庫
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved