Synchronization 架构更改后,在重新设置之前不要同步记录

Synchronization 架构更改后,在重新设置之前不要同步记录,synchronization,sync,microsoft-sync-framework,Synchronization,Sync,Microsoft Sync Framework,注:用户仅在暂存数据库中工作;生产数据库仅用于查看 当我们启动这两个数据库时,它们完全相同,所以配置数据库和同步工作正常 然后,当我更改模式时(当用户仍在处理暂存数据库时),问题就开始了。这是我的步骤 在暂存中添加/更新/删除行(由用户) 取消提供数据库 向表中添加/更新列 重新配置数据库 在取消设置和重新设置后,我的数据库变得不一致 现在,重新调配之前的更改不会同步到生产数据库。SF仅在提供后跟踪(在跟踪表中)行 我的工作范围-我强制更新每个表中的每一行(以便sync framwork认为

注:用户仅在暂存数据库中工作;生产数据库仅用于查看

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

然后,当我更改模式时(当用户仍在处理暂存数据库时),问题就开始了。这是我的步骤

  • 在暂存中添加/更新/删除行(由用户)
  • 取消提供数据库
  • 向表中添加/更新列
  • 重新配置数据库
  • 在取消设置和重新设置后,我的数据库变得不一致

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

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

    问题-这就是同步框架应该/设计的工作原理吗?


    谢谢你的意见

    它的工作方式:

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

    替代方法:

    有一种变通方法可以就地修改范围,而不是取消配置和重新配置。JuneT在一系列博客文章中创建了关于如何开始使用它的概要,从这里开始:

    具体解决您的情况:


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

    由于触发器和跟踪表不用于跟踪更改,因此无法检索在取消设置后和重新设置之前所做的更改

    这需要更长的时间,因为您可能会遇到冲突

    在取消设置和重新设置之前,您可能有一个与其包含的行相同的表

    假设在源和目标上有1M行

    现在您取消了设置,因此Sync-Fx将清除同步内容的知识。 您可以使用新的元数据(1M行加上或减去新插入或删除的行)重新设置和同步Fx以重新填充跟踪表

    现在,Sync-Fx不知道源中的数据与目标中已有的数据大致相同

    因此,它将1M+行发送到目标,当它们被应用时,您将得到PK冲突,因为这些行已经存在

    我可以看到您在源代码上修改了架构,但您仍在同步同一组列?如果新建/删除的列不属于范围,则不必取消设置。只有在希望影响范围定义中的架构更改时,才能取消设置或重新设置