0

我已经使用 Sync framework 2.1 进行了一些测试来同步两个数据库,但是当我更改数据库的架构时我一直遇到一些麻烦。

我的情况是:

  1. 两个 sql server 数据库同步并具有相同的架构。

  2. 我在远程数据库的某个表中添加了一个新列

  3. 重新配置远程数据库

  4. 再次尝试同步。

在第 4 步,我得到一个异常,表明我在远程 Db 中有一个新列,并且该列在本地 Db 中不存在。

所以,我想做的是获取有关该新列的信息,例如:列名、包含列的表以及列的数据类型。为了在本地数据库中添加该新列。

有谁知道如何获取这些信息?

4

2 回答 2

1

Sync Fx 不跟踪和同步架构更改。如果您在远程数据库上添加了一列并重新配置它,则不要期望目标数据库实际接收新表和范围定义。

框架对您的架构唯一了解的是您在配置期间告诉它的内容。配置后架构发生的任何事情都不会反映在范围定义中。

您可以使用 Mahesh 上面提到的方法比较源和目标之间的表模式,获取表描述并比较它们(例如,源中的哪些列不在目标中)。

然后,您可以取消配置和重新配置范围。

但这会带来另一个问题,您的源数据库和目标数据库已经包含数据。所以你会在第一次同步时遇到冲突。根据行数,这将是一个缓慢的同步。

如果您没有那么多行要同步,更简单的解决方案是简单地删除目标表并让 Sync Fx 使用新的范围定义重新创建表。

于 2013-09-17T00:50:30.130 回答
0

如果要在已配置的同步范围内更改架构,则需要首先在给定范围内取消配置两个数据库。然后进行架构更改并再次为给定范围提供服务。如果要同步表中的所有列,可以使用以下方法获取表模式

tableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable( TableName,  Connection);

如果要同步表中的选定列,请使用获取表模式的方法。列列表是您需要同步的列名列表。

SqlSyncDescriptionBuilder.GetDescriptionForTable( TableName,  ColumnList,  Connection);
于 2013-09-16T23:34:59.240 回答