【问题标题】:Filtered merge replication SQL Server 2008筛选合并复制 SQL Server 2008
【发布时间】:2012-03-28 19:18:03
【问题描述】:

我正在寻找有关如何实现双向复制的建议,该复制仅复制 SQL Server 2008 中的特定行。

例如,我想在两个数据库(欧洲和亚洲)之间复制表 A。我希望该表同时包含本地数据和共享数据。这将使用字段“区域”来表示,其值为

  1. 全球
  2. 欧洲
  3. 亚洲

我已经设置了一个合并复制,其中欧洲是发布者,亚洲是订阅者和过滤器

WHERE region = 1

试图只复制 region = 1 的行

global 行添加到欧洲或亚洲数据库非常适合显示在对面表中的行。

Europe 行添加到 Europe DB 效果很好,无需复制到 Asia DB(根据需要)

Asia 行添加到 Asia DB 中并不能满足我的要求,因为该行已复制到 Europe DB 并从 Asia DB 中删除。

我理解为什么发布者/订阅者关系会出现这种情况,但这令人沮丧。

然后我认为点对点可能是解决方案,但我无法过滤点对点。

有没有办法实现我正在寻找的东西?

谢谢大家

【问题讨论】:

  • 过滤器不是这样工作的——你不是说“只复制区域 1 的数据”,而是说“订阅者应该只包含区域 1 的数据”。
  • 达米恩,感谢您的回复。那么,我可以将过滤器更改为区域 IN (1,3)?这意味着亚洲数据库将拥有全球和亚洲数据,而欧洲数据库将拥有全球、欧洲和亚洲数据。关于如何实现我正在尝试的任何更好的想法?

标签: sql filter replication bidirectional merge-replication


【解决方案1】:

我认为您必须使用动态过滤器。创建过滤器时,您可以在 WHERE 子句之后键入更复杂的查询。您可以看到本教程,它是西班牙语,但您可以看到查询。 http://www.monografias.com/trabajos97/guia-crear-replica-mezcla-filtros-dinamicos-parametrizados-sql-server/guia-crear-replica-mezcla-filtros-dinamicos-parametrizados-sql-server.shtml

【讨论】:

    【解决方案2】:

    处理此问题的更好方法是使用第三个实例发布包含全球、欧洲和亚洲数据的数据。使用基于 HOST_NAME 和区域 1 过滤的 parameterized row filters 合并发布。设置覆盖每个 HOST_NAME() 值的欧洲和亚洲订阅。

    这样,欧洲和亚洲订阅仅接收全球和地区特定数据。

    【讨论】:

    • 谢谢布兰登......它确实引出了一个问题“在哪里托管第三个实例?”例如,如果它托管在欧洲服务器上,亚洲用户不会遇到潜在的延迟问题吗?
    • 出版商可以去欧洲或亚洲。如果您从延迟的角度考虑它,这与欧洲是发布者而亚洲是订阅者没有什么不同。无论哪种方式,数据仍然必须从欧洲 -> 亚洲流出。您是对的,亚洲用户会遇到潜在的延迟问题 - 但情况总是如此。
    • 我希望实现的只是全局数据复制的延迟。如果我在欧洲设置第三个实例,是否必须将亚洲数据发送到欧洲然后再返回?我希望只在每一侧保留这个“本地”数据,然后移动全局切片。也许最好将数据拆分为数据库中的重复表,然后在我想要完整集并复制全局表时将其联合起来?
    猜你喜欢
    • 1970-01-01
    • 2013-09-02
    • 2010-12-20
    • 2013-12-21
    • 1970-01-01
    • 2012-03-31
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多