【问题标题】:How to handle this replication scenario?如何处理这种复制场景?
【发布时间】:2013-07-14 05:24:45
【问题描述】:

假设有一些数据库:P、S1、S2、S3 等。

P(发布者)有一些表需要在 S1、S2 和 S3(订阅者)上复制(克隆和同步)。这些表的副本将是只读的。此外,副本将被 S1、S2、S3 等中的其他一些表引用(通过外键)。

例如,

  • P 有表 P.O1P.O2。 S1 将具有 S1.O1_copy、S1.O2_copyS1.OTHER,其中 S1.OTHER 引用 S1.O1_copy。

根据您的经验,可以在这种情况下使用SQL Server Transactional Replication(据我所知,这是基于日志的复制)吗?还是我应该更好地使用trigger-based replication?不过,我认为每次添加新订阅者(数据库)时可能都需要更新触发器。

P 中需要复制的表很少更新,但更新操作需要事务性,以确保数据一致性(任何从副本的读取都应该返回请求数据的最新快照)。

谢谢你:)

【问题讨论】:

    标签: sql-server database replication database-replication transactional-replication


    【解决方案1】:

    您可以为此使用事务复制。我要提出的警告都涉及初始化或重新初始化订阅者。添加文章时,默认行为是将对象放在订阅者处。如果您的表具有指向复制表的外键,则删除将失败。您当然可以解决这个问题,但需要注意这一点。

    另一件事:我喜欢将订阅的数据库视为只读的,因为它减少了我的备份需求(即,如果数据库发生问题,我创建一个新的并重新订阅,而不是恢复备份订户)。由于您在订阅者处存储新数据,因此您不会在这里享受这种奢侈。

    【讨论】:

    • 谢谢 :) 正如你所说,添加新文章后有一些方法可以避免快照重新初始化:herethere 等。希望你不介意,我在接受答案之前想听听其他一些意见。
    猜你喜欢
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多