0

注意:用户仅在 Staging DB 中工作;生产数据库仅供查看。

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

在此处输入图像描述

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

  1. 在暂存中添加/更新/删除行(由用户)
  2. 取消配置数据库
  3. 向表中添加/更新列
  4. 再次重新配置数据库

取消配置和重新配置后,我的数据库变得不一致。

在此处输入图像描述

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

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

问题 - 这是 Sync 框架应该/设计的工作吗?

谢谢您的意见!

4

2 回答 2

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-简介/

具体解决您的情况:

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

于 2012-07-11T16:40:49.380 回答
0

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

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

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

因此,假设您在源和目标上有 1M 行。

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

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

因此它将 1M+ 行发送到目的地,当它们被应用时,您会因为行已经存在而违反 PK。

我可以看到您修改了源上的架构,但您仍在同步同一组列?如果您新/删除的列不属于范围,则不必取消配置。如果您想影响范围定义中的架构更改,您只需取消配置或重新配置。

于 2012-07-12T08:01:10.127 回答