2011-04-04 70 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分钟是好的。

相关问题