首先感谢阅读。
我需要复制基于连接过滤器的数据子集;基于与另一个表的连接的过滤器(Microsoft:“使用连接过滤器,您可以将行过滤器从一个已发布的表扩展到另一个。”)。这是设置:
- SQL 服务器 2012;
- 订阅事务复制的复制源
- 复制需要是单向同步(从发布者到订阅者);
- 只有一个订户/订阅;
- 小数据集,交易不多;
- 广域网。
到目前为止我建立了什么:
选项 1 - 创建 View 并通过事务复制将它们复制到表中。
优点:不使用触发器,
缺点:像key这样的对象,约束没有被复制
选项 2 - 使用合并复制和连接过滤器并设置 @subscriber_upload_options = 2(仅下载)。
优点:原生 MS 功能,所有对象都被复制
缺点:合并复制使用触发器,这些不会被批量加载触发。
这两种方法的结果是完全一样的。然而,技术不同,例如使用的不同代理。据我了解,合并复制特别适用于服务器 - 客户端架构,这不是我的情况,但..它有效..
由于结果相同,我有点怀疑我应该采用哪种方法。我希望您能给我一些要点供我考虑或建议我应该遵循哪种方法。
最佳答案
对于这个问题中给出的设置,Transactional 和 Merge 复制类型都很好。
您唯一需要考虑的是:
- 如果向订阅者传输数据的延迟应最短,请选择事务复制。
- 如果您需要访问中间数据状态,请选择事务复制。
例如,如果一行更改了五次,事务复制允许应用程序响应每次更改(例如触发触发器),而不仅仅是行的净数据更改。
但是,您为应用程序选择的复制类型取决于许多因素。
以下是 learn.microsoft.com 上相关文章的链接:
关于sql-server - 复制过滤后的数据子集 : Merge or Transactional replication?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26999358/