2011-04-04 11 views
4

Sync Framework 2.1を使用してSQL ExpressからSQL Serverに同期しようとすると、次のエラーが発生することがあります。クライアントがこのエラーを受け取ると、スコープを再初期化する必要があります。エラー状態のような構文には何の問題もありません。長い間問題なく動作します(挿入が起こっているため)。何かご意見は?BulkInsertCommandがSync Framework 2.1で失敗しました

11:18:21 AM 'XXX'テーブルに対して 'BulkInsertCommand'コマンドを実行できませんでした。トランザクションはロールバックされました。コマンド構文が正しいことを確認してください。 午前11時18分21秒AMのMicrosoft.Synchronization トレースログからMicrosoft.Synchronization.Data.ChangeHandlerBase.CheckZombieTransaction(文字列コマンド名、文字列テーブル、例外EX)

で午前11時18分21秒AM:

警告、OfflineAgentMonitor.vshost、2011年4月5日11:16:17:224、BulkコマンドBulkUpdateCommandは次の例外を除いて失敗しました。 1回の適用で行が再試行されます。 System.Data.SqlClient.SqlException(0x80131904):対応するユーザー定義のテーブル型が20の列を必要とする19列のテーブル値のパラメーターを渡そうとしています。

+0

同じテーブルに対して複数のスコープが定義されていますか? – JuneT

+0

いいえ1つのスコープしか定義されていません。それはすべてのテーブルで起こるわけではありません。 – AKoran

+1

が失敗したクライアントの場合は、ユーザ定義のテーブルタイプ(プログラマビリティ - >タイプ - >ユーザ定義のテーブルタイプ)のカラムを、同期ペアの両側のbulkinsertおよびbulkupdateストアドプロシージャと比較してみてください。テーブルUDTと格納されているprocには列数が異なるため、プロビジョニングに問題があり、両方のスコープ定義を同期パートナー間で同期させておく必要があります。スコープを再プロビジョニングすると、テーブルUDTと各同期パーティのストアドプロシージャの両方で、一致する列が適切な数で再作成されているので、その理由を説明します。 – JuneT

答えて

2

Sync Fx tracingを有効にして、Sync Fxが元の例外を記録するかどうかを確認してください。私はそれが正しいことを覚えている場合、通常は、DB接続が失われると例外が発生します。スコープを再プロビジョニングしなくても同期を再試行できます。

+0

それは私にいくつかの追加情報を与えましたが、問題はまだ存在します。私はこれがsyncフレームワークのバグだと思っています。 – AKoran

+0

私は過去5ヶ月間Syncfxを幅広く使用しています(2.1と2.0のチームで1日を通して同期している4-5人のデベロッパーが参加しています)、このエラー(1回だけiirc)に遭遇したことを覚えていると思います。クライアントとサーバーのプロビジョニングの同期がとれていませんでした。 – stombeur

+0

JuneT:以前の削除されたスコープからいくつかの古いUDTがあったことが分かりました。正しい方向に私を指してくれてありがとう。 – AKoran

0

これは、2つのSQL Azureデータベースの間で同期していたことが原因でした。最初の原因は、スレーブDBがプロビジョニングされたサイズより大きくなったことです。私はサイズを増やしましたが、同期がエラーをスローするのを止めるまでには20分かかりました

関連する問題