我们需要将ProjectA和ProjectB数据库中的所有数据复制到中央数据库(所有数据都由不同的SQL Server实例托管)。 我通过在PojectA和Project B创建跨国出版物来采用中央订户拓扑;此外,在托管中央数据库的实例上创建订阅。我确保选择文章属性"保持现有对象不变&#34 ;;但是ProjectA的数据被来自ProjectB的目的地的数据所覆盖。 我做错了什么?
答案 0 :(得分:0)
中央订户模型的解决方案是使用静态行过滤器进行水平分区,并将操作(如果名称正在使用文章属性)设置为删除数据。如果文章有行过滤器,请仅删除与过滤器匹配的数据。
理想情况下,中央订户拓扑中的已发布表将被水平分区。为了对要发布的表进行水平分区,应添加特定于位置的列,并将其作为复合主键的一部分包含在内。
对于要在中央订户拓扑中发布的每篇文章,应定义静态行过滤器以适当地利用 Action(如果名称正在使用文章属性)。静态行过滤器使用WHERE子句来选择要发布的数据。要从Publisher 1发布行,请为filter子句指定LocationID = 1。同样,要从Publisher 2和Publisher 3发布行,请分别为filter子句指定LocationID = 2和LocationID = 3.
创建发布和添加文章时,需要将文章属性操作(如果名称正在使用中)设置为删除数据。如果文章有行过滤器,则只删除与过滤器匹配的数据。可以使用新建发布向导文章属性对话框或使用复制存储过程sp_addarticle并为 @pre_creation_cmd指定值删除来设置参数。这样,当从多个发布快照初始化或重新初始化中央订户时,将保留先前应用的快照数据,因为只有与过滤子句匹配的数据才会被删除。
我在Central Subscriber Model Explained中详细介绍了这一点。