2011-04-04 41 views
4

有時,當嘗試使用Sync Framework 2.1從SQL Express同步到SQL Server時,出現以下錯誤。一旦客戶得到這個錯誤,他們必須重新初始化範圍。像錯誤狀態這樣的語法不會有任何問題,因爲它在很長一段時間內沒有問題(插入發生)。有什麼想法嗎?BulkInsertCommand在Sync Framework 2.1中失敗

11:18:21 AM無法對錶'XXX'執行'BulkInsertCommand'命令;該交易被回滾。確保命令語法是正確的。 上午11時18分21秒Microsoft.Synchronization 上午11時18分21秒在Microsoft.Synchronization.Data.ChangeHandlerBase.CheckZombieTransaction(字符串命令名,字符串表,異常前)

從跟蹤日誌:

警告,OfflineAgentMonitor.vshost,13,2011年4月13日11:16:17:224,批量命令BulkUpdateCommand失敗,出現以下異常。在單次應用期間,行將被重試。 System.Data.SqlClient.SqlException(0x80131904):嘗試傳遞19列的表值參數,其中相應的用戶定義的表類型需要20列。

+0

您是否有針對同一個表定義的多個範圍? – JuneT 2011-04-05 12:00:31

+0

不,我只定義了一個範圍。所有表格都不會發生這種情況。 – AKoran 2011-04-05 12:42:46

+1

,嘗試將用戶定義的表類型(在Programmability-> Types-> User-Defined Table Types下)中的列與同步對的兩側的bulkinsert和bulkupdate存儲過程進行比較。如果表UDT和存儲的proc具有不同的列計數,因此在同步夥伴之間配置和保持兩個範圍定義同步時必定存在問題。這解釋了爲什麼重新設置範圍會修復該問題,因爲正在使用表UDT中的適當數量的匹配列和每個同步方上存儲的特效重新創建範圍。 – JuneT 2011-04-05 13:09:19

回答

2

嘗試啓用Sync Fx tracing並檢查同步Fx是否記錄原始異常。如果我記得沒錯,通常會在數據庫連接丟失時引發異常。您應該可以重試同步,但不需要重新設置範圍。

+0

它給了我一些額外的信息,但問題仍然存在。我開始認爲這是一個同步框架的錯誤。 – AKoran 2011-04-05 11:21:06

+0

過去5個月,我一直在使用Syncfx(2.1和2.0與4-5個開發人員同步整個一天的團隊),我想我記得遇到這個錯誤(只有一次iirc),這確實是在一個場景中客戶端和服務器配置不同步。 – stombeur 2011-04-05 18:14:47

+0

JuneT:原來的一些舊的UDT來自於先前刪除的範圍,這一切都搞砸了。感謝您指點我正確的方向。 – AKoran 2011-04-05 20:46:30

0

這發生在兩個SQL Azure數據庫之間的同步。最初的原因是從屬數據庫增長得比規定的大。我增加了大小,但是在同步停止拋出錯誤之前20分鐘是好的。