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

SQL Server 2005 與 2008 異構版本同步方案:交易式複寫實戰部署全記錄

     編輯:關於SqlServer

為何不能用鏡像/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) 設定

  1. SSMS 連線 SQL 2005 → 複寫 資料夾右鍵 → 設定散發。
    散發者可選「本機為散發者」或指定獨立散發者 (建議獨立以減輕發行者負載)。
  2. 建立發行集:
    資料庫:`TestFabu` (範例)
    類型:交易式發行集 (非快照式)
    發行項:勾選需同步的資料表、檢視、預存程序、UDF。
    篩選:可加入 WHERE 子句只同步子集。
  3. 快照代理程式排程:
    立即產生快照 + 定期重新整理 (如每日 02:00),確保新訂閱者可初始化。
  4. 發行集屬性 → FTP 快照資料夾 (跨機器必須):
    設定 FTP 站點根目錄、帳號密碼、被動模式。
    關鍵:FTP 路徑需對訂閱者可讀寫,且快照代理程式有寫入權限。
建立發行集精靈 - 發行項選擇
勾選資料表、預存程序等發行項
發行集屬性 - FTP 設定
設定 FTP 快照資料夾路徑與認證

步驟 2:訂閱者 (SQL 2008) 設定 — 提取式訂閱

  1. SSMS 連線 SQL 2008 → 複寫 → 本地訂閱 右鍵 → 新增訂閱。
  2. 發行者連線:
    瀏覽 → 找到 SQL 2005 發行者 (需 Hosts 映射主機名) → 選擇 `TestFabu` 發行集。
    驗證:SQL 驗證 (sa 或具複寫權限帳號)。
  3. 訂閱類型:提取式訂閱 — 由訂閱者決定同步頻率,減輕發行者推送壓力。
  4. 訂閱資料庫:建立新資料庫 `TestFabu_Sub` 或指定既有空資料庫。
  5. 散發代理程式排程:
    持續執行 (延遲 <1 秒) 或 定期 (如每 5 分鐘) — 視業務即時性需求而定。
  6. 初始化:選擇 立即使用快照初始化。
新增訂閱精靈 - 提取式訂閱設定
選擇提取式訂閱並設定排程
訂閱成功狀態
訂閱建立完成,狀態顯示「已同步」

步驟 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/共享路徑、帳號權限矩陣,納入運行手冊。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved