2011-08-02 123 views
0

我們排查特定生產問題的時候那種拍攝自己的腳在客戶現場有關於微軟同步框架...換出客戶端同步數據庫

我們有一箇中央服務器作爲數據記錄系統公開了一個WCF服務,我們使用Sync Framework 2.0來同步數據與斷開的客戶端實例。 (實現的許多細節都是未知的,它是一個繼承的代碼庫。)在過去的某個時間點對用戶計算機上的問題進行故障排除時,決定清除特定客戶端的本地數據庫並將其替換爲已知來自另一個客戶的好副本。

一切似乎工作一段時間。但是實施過程中有一個細節我們當時還不知道。同步內部跟蹤客戶端數據庫標識這意味着服務器無法區分這兩個客戶端。所以一個人會同步他們的數據,然後另一個會留在一個未知的狀態。

我們確定了受影響的用戶,我們正在識別受影響的數據,並且我們正在頭腦風暴潛在的解決方案。對於後一部分,我想知道這裏的任何人是否有使用Sync Framework的經驗,並且可以提出潛在的行動方案?

我們正在考慮的一種潛在方法是確定Sync在哪裏以及如何跟蹤該身份(可能是某處的GUID?)並對其進行更改。這聽起來像是最快速的修復,儘管它至少仍然會讓我們再次觸摸受影響的記錄來觸發它們再次同步。

我們不想冒丟失數據的風險,所以我們猶豫放棄客戶端數據庫並重新提供。但更重要的是供應一個全新的數據庫的這個過程是一個顯著命中資源和當前的設置用戶的停機時間,所以它的東西,以避免可能的話。

有沒有人在這裏有同步框架的經驗?有沒有人遇到過這個問題?你會建議什麼途徑?

+0

的數據庫提供商您使用(SqlSyncProvider/SqlCeSyncProvider?或SqlCEClientSyncProvider/DbServerSyncProvider?)什麼數據庫在客戶端(CE?,Express?)? – JuneT

+0

@JuneT:SQLExpress在客戶端上的SqlSyncProvider。 – David

回答

1

你的想法聽起來不錯,但至少得到參與,你需要確保繼承代碼庫不包含任何「意外」風險的感覺......請提供更多信息:

  • 使用哪個「同步提供者」?數據庫/文件/自定義?
  • 什麼是執行/提供配置「衝突解決規則」?
  • ,其中構架的版本? 2.0還是2.1?

編輯 - 按評論:

我不是100%肯定 - 請teast這第一個客戶端和驗證結果!
首先更換已accidentily得到一些其他的客戶端的副本客戶端上的客戶端GUID(否則「正常」被搞砸了!)。
然後調用PerformPostRestoreFixup此客戶端分貝。
一些更多的詳情,請參閱
http://msdn.microsoft.com/en-us/library/ee617375.aspx
http://msdn.microsoft.com/en-us/library/bb726041.aspx

+0

SqlSyncProvider。我並不熟悉衝突解決規則,我會如何發現?版本2.0。 – David

+0

由於我不知道難以分辨的來源......但這些問題可能會有所幫助:客戶端是否更新其數據庫副本?什麼是從客戶端同步到中央服務器? – Yahia

+0

是的。每個數據庫表都在四個配置的作用域中的一個,從我可以告訴:客戶端勝利,服務器勝利,最後一場勝利,衝突解決。前三個是不言自明的,最後一個涉及到我不完全熟悉的一些自定義代碼。但它基本上以兩個記錄之間的差異顯示在管理員屏幕上,用戶必須選擇要保留哪一個。因此,這個問題的複雜性似乎在於我們如何保存未同步的數據,並以不會進一步中斷Sync的方式保留數據。 – David

0

不幸的是,它不只是一個在範圍表更換的GUID的問題。

如果您的客戶端位於SqlServer或SqlExpress上,您可以運行PerformPostRestoreFixup,同步框架將爲您調整客戶端ID和副本密鑰映射。

下一次使用其他客戶端的備份初始化客戶端時,請確保在還原的副本上運行PerformPostRestoreFixup。

你的情況

,其中客戶端是潛在的不同步已經的,你可能有PerformPostRestoreFixup後做一些驗證

相關問題