我正在同步SQL Server2008和大约6个SQL Server2008Express客户端(我相信所有的R2 ),使用SyncOrchestrator,或者特别是使用http://code.msdn.microsoft.com/windowsdesktop/Database-SyncSQL-Server-e97d1208作为基础,稍加修改。据我所知,这意味着所有连接都是对等或节点。
我有两个示波器。一种是仅下载,另一种是仅上传。download only作用域充斥着identity列,主要是因为我不知道还有什么更好的方法,并且仍然不能理解在客户端引入Guid作为PK。这完全无关紧要,因为所有客户端都应该有大约8个表的精确副本,并且这些机器不会以任何方式接触这些数据,只读取它。
upload only作用域使用Guids,因为幸运的是,我可以控制数据库的这一部分,并且10个使用相同身份种子的客户端不可能正确地同步回服务器。这两个作用域都使用批量插入和整个9码的默认配置,所以我在配置端不应该做任何事情来搞砸这件事。
我最初没有使用PerformPostRestoreFixup设置所有内容,初始数据库将手动与主机上的insert语句同步。这看起来很好,但似乎没有应用任何更新或删除。您可以放心地忽略它(仅用于历史准确性和证明我的无能),因为我随后使用VS2010数据库项目将数据库重新构建为仅模式&已同步。然后,我使用了这里概述的步骤(http://social.microsoft.com/Forums/br/syncdevdiscussions/thread/9ac6d1a1-1565-4b82-a8d8-3d4a9ff5d07b) (同步、备份、恢复、调用性能存储修复、在x客户端上同步),并且在我正在设置所有这些的dev box上,我可以很好地看到更新和删除。当我将其部署到x客户端时,我并没有看到我认为应该看到的数据库镜像。
初始同步将出现错误,并尝试再次同步所有记录。我相信这是意料之中的。在客户端的ApplyChangeFailed事件期间,我将除DbConflictType.ErrorsOccurred之外的所有内容都设置为ApplyAction.RetryWithForceWrite。这可能是问题的根源,因为我最初认为应该这样做,以迫使客户端进行更改。我希望服务器在这种情况下总是成功,但是在跟踪期间,我总是在批量插入/更新调用期间看到短语"Local wins“。我可能在重新应用之前就看到了这个错误,但是看起来很尴尬。
我唯一的问题似乎是与下载范围有关。最初的客户端数据库现在大约有一周的历史,如果我使用performpostrestorefixup步骤,我看不到从现在到那时应用的任何更新,我认为我应该这样做。这就好像SyncFx几乎更喜欢客户端的空白数据库来启动初始同步,那么所有的更新似乎都可以很好地应用,而没有ApplyChangesFailed事件的启动。
如果有人以前看过或者知道该去哪里,我将不胜感激。我的脑子都要炸开了,想弄清楚到底是怎么回事。我最后的努力将是将空白数据库部署到所有客户端,并让它们启动同步。我在开发端对此没有任何问题,但我只能测试另一个客户端,以了解它是否会做任何不同的事情。除此之外,我不知道该做什么,除了继续做手动同步,这将完全违背这一目的。我以为PerformPostRestoreFixup会完全缓解这个问题,但不管有没有它,我似乎都遇到了同样的问题,或者我没有看到我需要做的事情。
谢谢
发布于 2012-04-27 04:09:34
我想要报告并结束我的调查结果。
当我部署以前配置的客户端数据库时,我经常会收到以下日志形式的ApplyChangeFailed事件:
下午05:30:41- ApplyChange失败: TableName:,阶段: ApplyingInserts,ConflictType: LocalInsertRemoteInsert,操作:RetryWithForceWrite
这是我所期望的,因为它试图重新插入已经存在的数据。本应在RetryWithForceWrite期间更改为update语句,但我发现数据没有随着发送的内容进行更新。
一旦我用一个完全空白的数据库启动了每个客户端,并在本地进行了配置,所有这些错误都消失了。这就好像每个客户端都希望自己设置一些唯一的id。我还使用了x64构建与x86构建,这可能会对结果有一些影响,也可能没有影响。我希望我能确定到底发生了什么,但似乎当有疑问时,无论何时,从绝对零点开始并让sync填写数据是最安全的选择。
https://stackoverflow.com/questions/10193915
复制相似问题