【问题标题】:BulkInsertCommand failed in Sync Framework 2.1BulkInsertCommand 在 Sync Framework 2.1 中失败
【发布时间】:2011-07-29 06:16:07
【问题描述】:

尝试使用 Sync Framework 2.1 从 SQL Express 同步到 SQL Server 时,有时会出现以下错误。一旦客户端收到此错误,他们必须重新初始化范围。像错误状态这样的语法不会有任何问题,因为它长时间运行没有问题(发生插入)。有什么想法吗?

上午 11:18:21 无法为表“XXX”执行命令“BulkInsertCommand”;事务被回滚。确保命令语法正确。 上午 11:18:21 微软同步 上午 11:18:21 在 Microsoft.Synchronization.Data.ChangeHandlerBase.CheckZombieTransaction(String commandName, String table, Exception ex)

来自跟踪日志:

警告,OfflineAgentMonitor.vshost,13,04/05/2011 11:16:17:224,批量命令 BulkUpdateCommand 失败,出现以下异常。在单次应用期间将重试行。 System.Data.SqlClient.SqlException (0x80131904): 尝试传递具有 19 列的表值参数,其中相应的用户定义表类型需要 20 列。

【问题讨论】:

  • 您是否针对同一个表定义了多个范围?
  • 没有。我只定义了一个范围。并非所有表格都发生这种情况。
  • 对于失败的客户端,尝试将用户定义的表类型(在 Programmability->Types->User-Defined Table Types 下)中的列与同步两侧的 bulkinsert 和 bulkupdate 存储过程进行比较pair.如果表 UDT 和存储的 proc 具有不同的列计数,则在同步伙伴之间供应和保持两个范围定义同步时肯定存在问题。这就解释了为什么重新配置范围会修复它,因为在表 UDT 和每个同步方上存储的过程中都使用正确数量的匹配列重新创建范围。

标签: c# sql microsoft-sync-framework


【解决方案1】:

这发生在我在 2 个 SQL Azure 数据库之间进行同步时。最初的原因是从数据库增长到大于它的预置大小。我增加了大小,但是在同步停止抛出错误之前已经过了 20 分钟

【讨论】:

    【解决方案2】:

    尝试启用Sync Fx tracing 并检查 Sync Fx 是否记录原始异常。如果我没记错的话,当数据库连接丢失时通常会引发异常。您应该能够重试同步,但无需重新配置范围。

    【讨论】:

    • 它给了我一些额外的信息,但问题仍然存在。我开始认为这是同步框架的错误。
    • 在过去的 5 个月里,我一直在广泛使用 Syncfx(2.1 和 2.0,4-5 名开发人员团队全天同步),我想我记得遇到过这个错误(只有一次 iirc)这确实是在客户端和服务器配置不同步的情况下。
    • JuneT:原来有一些旧的 UDT 来自以前删除的范围,这一切都搞砸了。感谢您为我指明正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2014-07-27
    • 1970-01-01
    相关资源
    最近更新 更多