為何不能用鏡像/AlwaysOn?
低版本無法連接高版本:SQL Server 2005 執行個體無法建立鏡像或可用性群組至 2008/2012+。複寫 是跨版本同步的官方支援路徑 (發行者版本 ≤ 訂閱者版本)。
複寫架構三角色速覽
| 角色 | 職責 | 比喻 |
| 發行者 | 資料來源,定義發行集 (Articles) | 報社 |
| 散發者 | 暫存異動命令、追蹤訂閱狀態、衝突解決 | 郵政轉運中心 |
| 訂閱者 | 接收資料,可為推播 或提取 模式 | 讀者 |
複寫類型選型
- 快照式複寫:定期全量覆蓋,適合資料量小、變動極低、容忍延遲的場景 (如參考表同步)。
- 交易式複寫:近即時,以交易記錄為單位傳遞 DML,適合高頻 OLTP 同步,**本文採用此類型**。
- 合併式複寫:雙向寫入、離線同步、衝突解決,架構複雜,非本場景所需。
實戰部署步驟:SQL 2005 (發行者) → SQL 2008 (訂閱者)
前置條件
- 雙邊 SQL Server Agent 服務啟動 (Windows 帳號,具備網路存取權)。
- 防火牆開放 1433 (SQL) + 445/139 (SMB,若用檔案共享快照資料夾) 或 FTP 通道。
- DNS/Hosts 解析:訂閱者需解析發行者主機名 (IP 直連易受限)。
步驟 1:發行者 (SQL 2005) 設定
- SSMS 連線 SQL 2005 → 複寫 資料夾右鍵 → 設定散發。
散發者可選「本機為散發者」或指定獨立散發者 (建議獨立以減輕發行者負載)。
- 建立發行集:
資料庫:`TestFabu` (範例)
類型:交易式發行集 (非快照式)
發行項:勾選需同步的資料表、檢視、預存程序、UDF。
篩選:可加入 WHERE 子句只同步子集。
- 快照代理程式排程:
立即產生快照 + 定期重新整理 (如每日 02:00),確保新訂閱者可初始化。
- 發行集屬性 → FTP 快照資料夾 (跨機器必須):
設定 FTP 站點根目錄、帳號密碼、被動模式。
關鍵:FTP 路徑需對訂閱者可讀寫,且快照代理程式有寫入權限。
勾選資料表、預存程序等發行項
設定 FTP 快照資料夾路徑與認證
步驟 2:訂閱者 (SQL 2008) 設定 — 提取式訂閱
- SSMS 連線 SQL 2008 → 複寫 → 本地訂閱 右鍵 → 新增訂閱。
- 發行者連線:
瀏覽 → 找到 SQL 2005 發行者 (需 Hosts 映射主機名) → 選擇 `TestFabu` 發行集。
驗證:SQL 驗證 (sa 或具複寫權限帳號)。
- 訂閱類型:提取式訂閱 — 由訂閱者決定同步頻率,減輕發行者推送壓力。
- 訂閱資料庫:建立新資料庫 `TestFabu_Sub` 或指定既有空資料庫。
- 散發代理程式排程:
持續執行 (延遲 <1 秒) 或 定期 (如每 5 分鐘) — 視業務即時性需求而定。
- 初始化:選擇 立即使用快照初始化。
選擇提取式訂閱並設定排程
訂閱建立完成,狀態顯示「已同步」
步驟 3:驗證與監控
- 複寫監視器 (SSMS → 複寫 → 右鍵啟動複寫監視器) — 即時查看未散發命令數、延遲秒數、錯誤詳情。
- 權杖追蹤:在發行者執行 `INSERT ...` → 監視器觀察命令流向訂閱者 → 訂閱者查詢確認。
- 快照資料夾權限:定期檢查 FTP 目錄下 `unc` 子目錄是否正常生成 `.sch`、`.bcp`、`.idx` 檔案。
常見問題與對策
| 現象 | 可能原因 | 解決方向 |
| 訂閱者長期「初始化中」 | 快照代理程式失敗 / FTP 路徑不可達 | 檢查快照代理程式錯誤日誌;驗證 FTP 連線與寫入權限 |
| 延遲秒數持續增長 | 散發代理程式阻塞 / 訂閱者端大量交易 / 網路抖動 | 檢查訂閱者鎖爭用;調整散發代理程式 `PollingInterval`;考慮升級頻寬 |
| 主鍵衝突錯誤 (2627) | 訂閱者端有獨立寫入 / 重複初始化 | 確保訂閱者唯讀;必要時加入 `NOT FOR REPLICATION` 觸發器/條件約束 |
| 架構變更 (ALTER TABLE) 未同步 | 預設不複寫 DDL | 啟用發行集屬性「複寫架構變更」或手動同步腳本 |
總結與演進建議
- **交易式複寫** 是 SQL 2005→2008 異構同步的穩健選擇,延遲可控制在秒級。
- 若目標升級至 SQL 2012+,可評估 **AlwaysOn 可用性群組** (需同版本) 或 **CDC + 自建 ETL** 替代複寫。
- 雲端遷移場景建議使用 **Azure SQL Data Sync** / **DMS (Database Migration Service)** 進行異構同步。
- 複寫拓撲文件化:記錄發行集/訂閱清單、代理程式排程、FTP/共享路徑、帳號權限矩陣,納入運行手冊。