2012-04-17 113 views
2

我正在使用SyncOrchestrator或特別使用http://code.msdn.microsoft.com/windowsdesktop/Database-SyncSQL-Server-e97d1208作爲基礎並稍作修改來同步SQL Server 2008與〜6 SQL Server 2008 Express客戶端(我相信所有的R2)。據我所知,這意味着所有連接都是對等點或節點。SyncFramework 2.1更新和刪除似乎並沒有正確應用

我有2個範圍。一個是僅下載,另一個僅上載。唯一的下載範圍遍佈了身份列,主要是因爲我不知道任何更好的,仍然不能包圍我的頭介紹Guids作爲客戶端的PK。這並不重要,因爲所有的客戶都應該有大約8個左右的表格的確切副本,並且這些機器不以任何方式觸摸這些數據,只能讀取它。

僅上載作用域使用Guids,幸運的是我可以控制數據庫的那部分,並且不會有任何10個客戶端全部使用相同的身份種子可以正確地同步回服務器。這兩個示波器都使用默認配置,使用批量插入和整個9碼,所以在配置結束時我不應該做任何事情來解決這個問題。

我最初將所有設置設置爲不使用PerformPostRestoreFixup,並且初始數據庫將手動與來自主機的插入語句同步。這看起來很好,但沒有更新或刪除似乎永遠不會被應用。您可以放心地忽略這一點(僅用於歷史準確性並證明我的不合格),因爲我之後使用VS2010數據庫項目將數據庫重建爲只同步到&的模式。然後,我使用了此處列出的步驟(http://social.microsoft.com/Forums/br/syncdevdiscussions/thread/9ac6d1a1-1565-4b82-a8d8-3d4a9ff5d07b)(同步,備份,還原,調用performpostrestorefixup,在x客戶端上同步),並在我的開發箱,我設置所有這些,我可以看到更新和刪除就好了。當我將它部署到x客戶端時,我沒有看到數據庫的鏡像,因爲我認爲我應該這樣做。

初始同步會發出抱怨,並嘗試再次同步所有記錄。我相信這是預料之中的。在客戶端的ApplyChangeFailed事件期間,我將除了DbConflictType.ErrorsOccurred之外的所有內容都設置爲ApplyAction.RetryWithForceWrite。這可能是一個問題的根源,因爲我最初認爲應該這樣做來迫使客戶變更。我希望服務器總是在這種情況下獲勝,但在跟蹤過程中,在批量插入/更新調用期間,我總是看到「本地獲勝」這個短語。在重新申請之前,我可能會看到錯誤,但看起來很尷尬。

我似乎遇到的唯一問題是僅下載範圍。最初的客戶端數據庫現在大約一週,如果我使用performpostrestorefixup步驟,我沒有看到現在和之後應用的任何更新,因爲我認爲我應該這樣做。就好像SyncFx幾乎更喜歡客戶端上的空白數據庫以啓動初始同步,然後所有更新似乎都適用於沒有啓動ApplyChangesFailed事件的情況。

如果任何人之前見過或有線索去哪裏,我將不勝感激。我的大腦試圖確定它發生了什麼。我最後的努力將是將空白數據庫部署到所有客戶端,並讓他們開始同步。我在開發方面對此沒有任何問題,但我只能測試另一個客戶端,以確定它是否會做出任何不同的事情。除此之外,我不知道要做什麼,除非繼續進行手動同步,否則這將完全失敗。我認爲PerformPostRestoreFixup可以完全緩解這個問題,但我似乎在使用或不使用它時都會遇到同樣的問題,或者我沒有看到我需要的東西。

謝謝

+0

您提到的下載範圍,您是否在ApplyChangesFailed事件上獲得任何內容,或者它不會下載任何更改? – JuneT 2012-04-20 02:42:04

+0

對不起,我應該提到這一點。下載始終通過LocalUpdateRemoteUpdate或LocalInsertRemoteInsert啓動ApplyChangesFailed。我沒有得到的是客戶不接觸任何這些表。 有一點可能指出問題是有一個ModifiedOn(日期時間)字段,但代碼剛剛被引入來更新這個。數據庫不會將此用作rowversion,但可能有一些我沒有正確配置的模式。 – 2012-04-23 15:02:02

回答

1

我想用我的發現報告並關閉輸入。

當我將部署之前配置的客戶端數據庫,我經常會ApplyChangeFailed事件,該日誌的形式:

「[下午5時30分41秒] - ApplyChange失敗:表名:,第一階段: ApplyingInserts,ConflictType:LocalInsertRemoteInsert,Action:RetryWithForceWrite「

這是我認爲會期望的,因爲它試圖重新插入已經存在的數據。在RetryWithForceWrite期間,應該更改爲更新語句,但我發現數據並未隨發送的內容而更新。

一旦我用一個完全空白的數據庫啓動每個客戶端並在本地進行配置,所有這些錯誤就消失了。就好像每個客戶都希望只有它設置一些唯一的ID。我也使用x64版本,而x86版本對結果可能有一些或沒有影響。我希望我能確定究竟發生了什麼,但似乎有疑問時,並且在可能的情況下,從絕對零開始並讓同步填充數據是最安全的選擇。

+0

所有這一切的唯一差異是,同步每30分鐘運行一次,並且跨越閾值進行一些更改,這意味着我可以在一個小時內計算17次更新,但某些客戶端會觸摸14 + 3,某些16 + 1等。只要我最終的結果最終我很高興。我敢打賭,這可能與服務器上的時間有關。 – 2012-04-26 20:33:13