架构更改后,请勿在重新配置之前同步记录

时间:2012-07-11 14:54:44

标签: synchronization sync microsoft-sync-framework

注意:用户仅适用于Staging DB;生产数据库仅供查看。

当我们启动时,这两个数据库完全相同,因此配置数据库和同步工作正常。

enter image description here

然后问题在我更改架构时开始(当用户仍在使用暂存数据库时)。这是我的步骤。

  1. 行在分段中添加/更新/删除(由用户提供)
  2. 取消配置数据库
  3. 向表添加/更新列
  4. 再次重新配置数据库
  5. 在取消配置和重新配置后,我的数据库变得不一致。

    enter image description here

    现在,重新提供之前 的更改 未同步到生产数据库。 SF仅在提供后跟踪(在跟踪表中)行。

    我的工作 - 我强制更新每个表中的每一行(以便同步框架认为行已更新)。但是,重新配置后第一次同步需要几个小时。

    问题 - 这是Sync框架假设/设计的工作原理吗?

    感谢您的投入!

2 个答案:

答案 0 :(得分:1)

它的工作方式:

如果您要完全取消配置并重新配置一个数据库,则Sync Framework也希望您重新初始化其他数据库。这意味着在(重新)配置和复制&之后备份您的“主”数据库。将其恢复到您的辅助设备,然后在其上运行PostRestoreFixup(http://msdn.microsoft.com/en-us/library/microsoft.synchronization.data.sqlserver.sqlsyncstorerestore.performpostrestorefixup.aspx)。

替代方法:

有一种解决方法可以就地修改范围,而不是取消配置和重新配置。 JuneT在此处开始的一系列博客文章中创建了如何开始使用的大纲:http://jtabadero.wordpress.com/2011/03/21/modifying-sync-framework-scope-definition-part-1-introduction/

具体解决您的情况:

听起来您遇到的问题的关键可能是当您的登台数据库中存在未同步的本地更改时,架构会发生更改并取消配置/重新配置。您可以通过确保在进行架构更改和执行取消配置/重新配置之前运行同步来解决您遇到的大多数问题。如果这是可行的,它可能比其他选项更简单。

答案 1 :(得分:0)

在您取消配置之后和重新配置之前所做的更改未被检索,因为触发器和跟踪表不在那里跟踪更改。

由于您可能遇到冲突,所以需要更长的时间。

在取消配置和重新配置之前,您可能在其包含的行中拥有相同的表。

所以假设您在源和目标上有1M行。

现在您取消配置,因此Sync Fx消除了对同步内容的了解。 您重新配置并且同步Fx使用新元数据(1M行加上或减去新插入或删除的行)重新填充跟踪表。

现在,Sync Fx并不知道源中的数据或多或少与目标上的数据相同。

所以它将1M +行发送到目标,当它们被应用时,你会得到PK违规,因为这些行已经存在。

我可以看到你在源代码上修改了架构,但是你仍在同步一组列?如果新的/删除的列不是范围的一部分,则不必取消配置。如果要在范围定义中影响架构更改,则只能取消配置或重新配置。