SQL Server 2000 複寫功能雖成熟,但設定繁瑣、跨網段/防火牆部署困難。許多實務案例改用「連結伺服器 + 分散式交易 (MSDTC) + Agent 作業排程」實現輕量級同步。本文詳細記錄複寫標準部署步驟、連結伺服器同步替代方案、作業排程設定、MSDTC 啟用與常見問題排解。
SynUser) 加入 Administrators 群組,作為快照資料夾存取、Agent 服務登入身分。D:\PUB),授予 SynUser 完整控制權限。SynUser 啟動。SynUser。C:\Windows\System32\drivers\etc\hosts 加入對方 IP 與電腦名稱對應。\\Publisher\PUB。distribution。適用場景:僅需單向/雙向資料表同步、不需完整複寫功能、跨網段/雲端、欲自訂同步邏輯 (衝突處理、條件同步)。
-- 來源伺服器 (SRC) 執行,連結目標伺服器 (DST)
EXEC sp_addlinkedserver 'DST', '', 'SQLOLEDB', 'DST_IP_or_Name';
EXEC sp_addlinkedsrvlogin 'DST', 'false', NULL, 'sync_user', 'sync_pwd';
GO
CREATE PROCEDURE dbo.Sync_Table_Data
AS
BEGIN
SET NOCOUNT ON;
BEGIN DISTRIBUTED TRANSACTION;
-- 1. 更新已存在且異動的列
UPDATE DST
SET Col1 = SRC.Col1, Col2 = SRC.Col2, ..., ModTime = GETDATE()
FROM DST_DB.dbo.TargetTable DST
JOIN SRC_DB.dbo.SourceTable SRC ON DST.PK = SRC.PK
WHERE DST.Col1 <> SRC.Col1
OR DST.Col2 <> SRC.Col2
-- ... 其他需比對欄位
OR DST.ModTime <> SRC.ModTime;
-- 2. 插入新增列
INSERT INTO DST_DB.dbo.TargetTable (PK, Col1, Col2, ..., CreateTime)
SELECT PK, Col1, Col2, ..., GETDATE()
FROM SRC_DB.dbo.SourceTable SRC
WHERE NOT EXISTS (SELECT 1 FROM DST_DB.dbo.TargetTable DST WHERE DST.PK = SRC.PK);
-- 3. 刪除來源已刪除的列 (視業務決定是否啟用)
-- DELETE DST
-- FROM DST_DB.dbo.TargetTable DST
-- WHERE NOT EXISTS (SELECT 1 FROM SRC_DB.dbo.SourceTable SRC WHERE SRC.PK = DST.PK);
COMMIT TRANSACTION;
END;
GO
Sync_TargetTable,啟用。EXEC dbo.Sync_Table_Data。關鍵:確保 SQL Server Agent 服務已啟動且設為自動。
| 現象 | 原因 | 對策 |
|---|---|---|
| 連結伺服器查詢「登入失敗」 | sp_addlinkedsrvlogin 對應錯誤 / 目標伺服器混合模式未啟用 | 檢查連結伺服器安全性頁面、目標伺服器驗證模式 |
| 分散式交易「MSDTC 不可用」 | MSDTC 服務未啟動 / 防火牆阻擋 135/動態埠 / 安全性設定未勾選網路存取 | 雙邊啟用 MSDTC、開放防火牆、元件服務完整勾選安全性選項 |
| 同步預存程序「鎖死/逾時」 | 大量資料更新長時間持有鎖、缺乏索引、交易範圍過大 | 分批處理 (TOP 1000 迴圈)、確保 JOIN 欄位有索引、縮小交易範圍 |
| 複寫快照代理「存取被拒」 | 快照資料夾權限/共用設定錯誤 | UNC 路徑、SynUser 完整控制、防火牆 445 |
| 複寫「主鍵違規」 | 訂閱者已有相同 PK、雙向寫入衝突 | 重新初始化訂閱、改用合併式複寫或連結伺服器自訂衝突邏輯 |
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| SQL Server 複寫 | 成熟、GUI 管理、支援異構、衝突解決 | 設定複雜、散發資料庫額外負擔、跨網段困難 | 傳統內網、需完整複寫功能 |
| 連結伺服器 + 作業 | 輕量、彈性自訂邏輯、無額外元件 | 需自行處理衝突、錯誤重試、監控、MSDTC 設定 | 簡單同步、跨網段、雲端混合 |
| AlwaysOn 可用性群組 (2012+) | 高可用+讀取延伸、自動容錯移轉 | 需 Enterprise/Standard、Windows 叢集、同網段 | 高可用為主、同步為副 |
| CDC + Kafka/Debezium | 即時串流、微服務整合、多下游 | 架構複雜、需額外基建 | 事件驅動、資料湖、即時分析 |
| Azure SQL Data Sync / 異地複寫 | 雲原生、跨區域、受控服務 | 僅限 Azure SQL、延遲較高 | 雲端混合、異地備援 |
SQL Server 2000 時代的標準複寫與連結伺服器排程同步,解決了許多跨伺服器資料一致性需求。隨著版本演進,AlwaysOn、CDC、雲端同步服務提供更強大、易維護的替代方案。建議依據「資料量、延遲容忍度、網路拓撲、團隊技能、授權成本」綜合評估,選擇最適合當前與未來 3-5 年的架構。