我已经使用Sync framework 2.1进行了一些测试来同步两个数据库, 但是当我改变数据库的架构时,我一直有些麻烦。
我的情景是:
两个sql server数据库同步并具有相同的架构。
我在远程数据库的某个表中添加了一个新列
重新配置远程数据库
尝试再次同步。
在步骤4中,我得到一个异常表示我在远程Db处有一个新列,并且该列不存在于本地Db。
所以,我想要做的是获取有关该新列的信息,例如:Column Name,包含Column的Table和Column的数据类型。 为了在本地数据库中添加新列。
有谁知道如何获取这些信息?
答案 0 :(得分:1)
同步Fx不会跟踪和同步架构更改。如果您在远程数据库上添加了一列并重新配置它,请不要指望目标数据库实际接收新的表和范围定义。
框架对架构的唯一了解就是您在配置期间告诉它的内容。配置后发生在您的模式中的任何内容都不会反映在范围定义中。
您可以使用Mahesh上面提到的方法比较源和目标之间的表模式,获取表描述并比较它们(例如,源中的哪个列不在目标中)。
然后您可以取消配置和重新配置范围。
但随后引入了另一个问题,您的源数据库和目标数据库已包含数据。所以你在第一次同步时会遇到冲突。根据行数,这将是一个慢同步。
如果您没有要同步的那么多行,那么更简单的解决方案就是简单地删除目标表并让Sync Fx使用新的范围定义重新创建表。
答案 1 :(得分:0)
如果要更改已配置的同步范围中的架构,则需要首先取消配置给定范围内的两个数据库。然后执行架构更改并再次为给定范围配置。 如果要同步表中的所有列,可以使用以下方法获取表模式
tableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable( TableName, Connection);
如果要同步表中的选定列,请使用该方法获取表模式。列列表是您需要同步的列名列表。
SqlSyncDescriptionBuilder.GetDescriptionForTable( TableName, ColumnList, Connection);