2012-04-17 74 views
2

我正在使用SyncOrchestrator或特别使用http://code.msdn.microsoft.com/windowsdesktop/Database-SyncSQL-Server-e97d1208作为基础并稍作修改来同步SQL Server 2008与〜6 SQL Server 2008 Express客户端(我相信所有的R2)。据我所知,这意味着所有连接都是对等点或节点。SyncFramework 2.1更新和删除似乎并没有正确应用

我有2个范围。一个是仅下载,另一个仅上载。唯一的下载范围遍布了身份列,主要是因为我不知道任何更好的,仍然不能包围我的头介绍Guids作为客户端的PK。这并不重要,因为所有的客户都应该有大约8个左右的表格的确切副本,并且这些机器不以任何方式触摸这些数据,只能读取它。

仅上载作用域使用Guids,幸运的是我可以控制数据库的那部分,并且不会有任何10个客户端全部使用相同的身份种子可以正确地同步回服务器。这两个示波器都使用默认配置,使用批量插入和整个9码,所以在配置结束时我不应该做任何事情来解决这个问题。

我最初将所有设置设置为不使用PerformPostRestoreFixup,并且初始数据库将手动与来自主机的插入语句同步。这看起来很好,但没有更新或删除似乎永远不会被应用。您可以放心地忽略这一点(仅用于历史准确性并证明我的不合格),因为我之后使用VS2010数据库项目将数据库重建为只同步到&的模式。然后,我使用了此处列出的步骤(http://social.microsoft.com/Forums/br/syncdevdiscussions/thread/9ac6d1a1-1565-4b82-a8d8-3d4a9ff5d07b)(同步,备份,还原,调用performpostrestorefixup,在x客户端上同步),并在我的开发箱,我设置所有这些,我可以看到更新和删除就好了。当我将它部署到x客户端时,我没有看到数据库的镜像,因为我认为我应该这样做。

初始同步会发出抱怨,并尝试再次同步所有记录。我相信这是预料之中的。在客户端的ApplyChangeFailed事件期间,我将除了DbConflictType.ErrorsOccurred之外的所有内容都设置为ApplyAction.RetryWithForceWrite。这可能是一个问题的根源,因为我最初认为应该这样做来迫使客户变更。我希望服务器总是在这种情况下获胜,但在跟踪过程中,在批量插入/更新调用期间,我总是看到“本地获胜”这个短语。在重新申请之前,我可能会看到错误,但看起来很尴尬。

我似乎遇到的唯一问题是仅下载范围。最初的客户端数据库现在大约一周,如果我使用performpostrestorefixup步骤,我没有看到现在和之后应用的任何更新,因为我认为我应该这样做。就好像SyncFx几乎更喜欢客户端上的空白数据库以启动初始同步,然后所有更新似乎都适用于没有启动ApplyChangesFailed事件的情况。

如果任何人之前见过或有线索去哪里,我将不胜感激。我的大脑试图确定它发生了什么。我最后的努力将是将空白数据库部署到所有客户端,并让他们开始同步。我在开发方面对此没有任何问题,但我只能测试另一个客户端,以确定它是否会做出任何不同的事情。除此之外,我不知道要做什么,除非继续进行手动同步,否则这将完全失败。我认为PerformPostRestoreFixup可以完全缓解这个问题,但我似乎在使用或不使用它时都会遇到同样的问题,或者我没有看到我需要的东西。

谢谢

+0

您提到的下载范围,您是否在ApplyChangesFailed事件上获得任何内容,或者它不会下载任何更改? – JuneT 2012-04-20 02:42:04

+0

对不起,我应该提到这一点。下载始终通过LocalUpdateRemoteUpdate或LocalInsertRemoteInsert启动ApplyChangesFailed。我没有得到的是客户不接触任何这些表。 有一点可能指出问题是有一个ModifiedOn(日期时间)字段,但代码刚刚被引入来更新这个。数据库不会将此用作rowversion,但可能有一些我没有正确配置的模式。 – 2012-04-23 15:02:02

回答

1

我想用我的发现报告并关闭输入。

当我将部署之前配置的客户端数据库,我经常会ApplyChangeFailed事件,该日志的形式:

“[下午5时30分41秒] - ApplyChange失败:表名:,第一阶段: ApplyingInserts,ConflictType:LocalInsertRemoteInsert,Action:RetryWithForceWrite“

这是我认为会期望的,因为它试图重新插入已经存在的数据。在RetryWithForceWrite期间,应该更改为更新语句,但我发现数据并未随发送的内容而更新。

一旦我用一个完全空白的数据库启动每个客户端并在本地进行配置,所有这些错误就消失了。就好像每个客户都希望只有它设置一些唯一的ID。我也使用x64版本,而x86版本对结果可能有一些或没有影响。我希望我能确定究竟发生了什么,但似乎有疑问时,并且在可能的情况下,从绝对零开始并让同步填充数据是最安全的选择。

+0

所有这一切的唯一差异是,同步每30分钟运行一次,并且跨越阈值进行一些更改,这意味着我可以在一个小时内计算17次更新,但某些客户端会触摸14 + 3,某些16 + 1等。只要我最终的结果最终我很高兴。我敢打赌,这可能与服务器上的时间有关。 – 2012-04-26 20:33:13