多个发布者,单个订阅者(数据仓库)



我正试图找出在a中填充staging数据库的最佳方法数据仓库。我将有许多数据库(相同的模式,SQL服务器2005标准)。理想情况下,我将每个人都设置为发行商同样的出版物。将有一个单一的订阅者数据库(SQL Server)2005 Enterprise),它将订阅每个发布者数据库。发行者数据库中的数据将被修改。订阅者数据库将只由其订阅更新,因此不需要将更改发送回任何发布者。出版商数据库不需要互相更新。复制将在互联网上进行(虽然可以使用VPN)。

我不清楚我应该用什么样的复制。我可以复制吗?增量字段呢?

Replication绝对可以处理这个问题。除了标准设置,你不需要做任何事情,除非不同发行商的表之间有任何重叠。也就是说,如果您有pub_a和pub_b作为发布者,它们都有一个表tbl_a,那么您要么必须将它们发布到订阅者的不同表(目标表在对sp_addarticle的调用中定义),要么必须保证不同发布者之间的数据永远不会冲突。在后一种情况下,还需要注意在调用sp_addarticle时为@pre_creation_cmd参数提供的内容。默认是在订阅者处删除表,这意味着最后加入的发布者将获胜,其余的将被破坏。你需要为第一个添加的发布者指定"drop",为其余的指定"none"。好运!

我相信这是可能的,但是您应该以与指定相反的方式设置它。您可以将中央数据库设置为发布者,并使用Merge Replication。

Merge Replication包含一个允许动态过滤器的选项——因此您需要做的是设置过滤器,以便每个订阅者只接收它发起的行——可能是通过在一些表中添加一个列来包含行发起的服务器的HOST_NAME()。您不需要对每个表都这样做,因为一旦过滤了一个表,就可以使用级联过滤器从其他表中过滤出行。

至于"增量字段"——我想你在这里说的是IDENTITY列吧?幸运的是,我们也考虑过这些问题——基本上,发布者管理IDENTITY范围,并将较小的范围(默认为1000个值)分发给每个订阅者。

警告-这些是一般原则,但我自己以前没有尝试过这种设置。我建议您先在一个"玩具"数据库中尝试一下,然后试着让它工作。

最新更新