一、 架構概覽與前置需求
採用**快照式複寫**(Snapshot Replication)或**異動複寫**(Transactional Replication),將發佈端資料同步至一或多個訂閱端。核心前置條件:
- 雙向網路通暢(TCP 1433/自訂埠、UDP 1434 Browser)
- 共用快照資料夾具備讀寫權限
- SQL Server Agent 服務以同一網域帳號啟動
- 混合驗證模式(SQL Server + Windows)
- 雙方已在 SSMS 註冊彼此伺服器
二、 詳細前置作業清單
1. 建立同步專用網域帳號
-- 於發佈端與訂閱端各建立相同帳號/密碼,加入 Administrators 群組
User: repl_sync_user
Pwd: ComplexPassword123!
2. 建立快照共用資料夾
- 發佈端建立資料夾
D:\ReplSnapshot
- 右鍵 → Properties → Sharing → Advanced Sharing → Share this folder
- Permissions → Add → 輸入
repl_sync_user → 給予 Full Control
- NTFS 安全性頁籤同樣給予
repl_sync_user 完整控制權
3. 設定 SQL Server Agent 服務登入身分
- services.msc → SQL Server Agent (MSSQLSERVER) → 右鍵 Properties
- Log On 索引標籤 → This account → 輸入
DOMAIN\repl_sync_user 與密碼
- OK → 重新啟動服務
- **發佈端與訂閱端皆需設定**
4. 啟用混合驗證模式
- SSMS 連線 → 右鍵伺服器 → Properties → Security
- Server authentication → SQL Server and Windows Authentication mode
- OK → 重新啟動 SQL Server 服務
5. 雙向註冊伺服器
SSMS → Registered Servers (Ctrl+Alt+G) → 右鍵 Database Engine → New Server Registration → 以 SQL 驗證 (sa) 登入彼此伺服器。
6. 別名設定(僅能用 IP 連線時)
cliconfg.exe (Client Network Utility) → Alias → Add → TCP/IP → 伺服器別名 = 實際 SQL 名稱,連線參數輸入 IP 位址與埠號。
7. 啟用網路協定
SQL Server Configuration Manager → Protocols for MSSQLSERVER → 啟用 TCP/IP 與 Named Pipes → 重新啟動服務。
三、 建立快照式發佈與訂閱(逐步操作)
1. 設定發佈者與散發者
- SSMS → Replication → 右鍵 Local Publications → New Publication
- 精靈:選擇資料庫 → **Snapshot Publication** → 選擇發佈物件(資料表/檢視/SP)
- Snapshot Folder → 輸入共用路徑
\\PUB_SERVER\ReplSnapshot
- 設定快照代理程式排程(如每日 02:00) → 命名發佈(如
Pub_SalesData)
2. 建立訂閱(推送訂閱,由發佈端主動推送)
- 右鍵 Local Subscriptions → New Subscription
- 選擇發佈
Pub_SalesData → 選擇 Push Subscription
- 加入訂閱伺服器 → 選擇目標資料庫
- 代理程式排程:Run continuously(持續執行)或依需求排程
- 完成精靈
四、 驗證與監控
- SSMS → Replication Monitor (Ctrl+Alt+R) → 檢視同步狀態、延遲、錯誤記錄
- 發佈端執行
sp_helppublication、sp_helpsubscription 查詢中繼資料
- 訂閱端查詢資料筆數、檢查關鍵資料表是否一致
五、 常見問題排查
| 錯誤現象 | 原因 | 解決 |
| 快照代理失敗「Access denied」 | 共用資料夾權限不足 | 檢查 NTFS + 共用權限皆給 repl_sync_user Full Control |
| 訂閱代理「Login failed for user」 | SQL Agent 服務帳號錯誤/密碼過期 | 重新設定 Agent 登入帳號、同步密碼 |
| 防火牆阻擋 | TCP 1433/UDP 1434 未開放 | 雙向防火牆開放埠與 sqlservr.exe/sqlbrowser.exe |
| 異動複寫延遲大 | 網路頻寬/磁碟 I/O 瓶頸 | 調整批次大小、壓縮快照、考慮異動複寫參數優化 |
六、 進階建議
- **大資料量初始化**:先手動備份/還原資料庫至訂閱端,再建立訂閱並勾選 Initialize from backup,避免巨大快照傳輸。
- **異動複寫**:需資料近即時同步時改用 Transactional Replication,設定
sp_addpublication @sync_method = 'concurrent'。
- **監控告警**:設定 Replication Monitor 警示(延遲 > 閾值、代理失敗)發送郵件通知。
- **安全性**:僅開放必要埠、使用憑證加密連線、定期輪換同步帳號密碼。