首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 2000 + SQL Server Mobile Edition 合併式複寫完整部署實錄

     編輯:MySQL 資料庫相關知識

受限於既有系統仍運行 SQL Server 2000,無法升級至 2005,本文記錄在 **SQL Server 2000 SP3 + SQL Server Mobile Edition (CE 3.0) SP3** 環境下,建立合併式複寫 (Merge Replication) 供 Pocket PC (PPC) 端離線同步的完整步驟與坑點。

前置條件:修補程式順序關鍵

  1. SQL Server 2000 **SP3** (含複寫元件更新)。
  2. SQL Server CE **SP3** (針對 2000 的相容性修正)。
  3. 必須先裝雙 SP3,SQL Server CE 3.0 安裝程式才能偵測到 2000 複寫元件,否則安裝會卡在前置檢查。

伺服器端設定流程 (參考 MSDN 2005 文件,術語通用)

  1. 建立快照資料夾:共享權限給快照代理帳戶與 IIS 匿名帳戶。
  2. 建立發佈:選擇合併式複寫,指定發行項目 (資料表/篩選)。
  3. 設定訂閱存取清單 (PAL):加入 IIS 匿名帳戶與同步代理帳戶。
  4. Web 同步精靈:建立 IIS 虛擬目錄指向 sqlcesa30.dll,啟用 HTTPS (生產環境必備)。
  5. 產生初始快照:代理排程建議設為 **1 分鐘/次**,避免「快照過期」錯誤 (實際為快照尚未產生即嘗試同步)。

訂閱端:PPC 以程式碼建立訂閱並同步

SQL Server 2000 精靈**無法建立 CE 相容訂閱**,必須在裝置端程式撰寫:

SqlCeReplication repl = new SqlCeReplication();
repl.InternetUrl = "https://server/ce_sync/sqlcesa30.dll";
repl.Publisher = "server";
repl.PublisherDatabase = "PubDB";
repl.PublisherSecurityMode = SecurityType.NTAuthentication;
repl.Publication = "MergePub";
repl.Subscriber = "PPC_Sub";
repl.SubscriberConnectionString = 
    @"Data Source='\My Documents\data.sdf';Password='pwd';Max Database Size=64;";

repl.AddSubscription(AddOption.CreateDatabase); // 建立本地 .sdf
repl.Synchronize(); // 執行合併同步

常見異常與排查

錯誤訊息原因解決
快照過期 / Snapshot obsolete快照代理尚未執行完成即同步調整代理排程為 1 分鐘/次,確認快照狀態為「完成」再同步
無法連線至發行者防火牆阻擋、IIS 虛擬目錄權限錯誤開放 80/443、確認 sqlcesa30.dll 執行權限、PAL 包含匿名帳戶
衝突解決失敗同一資料列雙端同時修改設定發行項目衝突解決器 (伺服器勝/用戶勝/自訂 COM)

驗證成功指標

  • 裝置端 .sdf 檔建立完成,資料表結構與資料同步無誤。
  • 離線修改後再次同步,變更正確合併至伺服器。
  • 衝突記錄出現在 MSmerge_conflict_ 系統表中。

遷移建議

SQL Server 2000 已停止支援,長期規劃應評估遷移至 **SQL Server 2019/2022 + .NET MAUI / Xamarin** 架構,利用現代合併式複寫或雲端同步服務 (Azure SQL Data Sync) 替代 CE 技術棧。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved