You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server多发布者向单订阅者复制:数据覆盖问题及配置咨询

SQL Server 数据聚合复制配置问题解答

问题1:上述理解是否正确?

是的,你的理解完全正确。默认配置的快照复制在初始化订阅时,会执行快照文件中包含的DROP TABLE和CREATE TABLE语句,这会直接清空并重建目标表。因此后续运行的快照同步会覆盖之前的目标表数据,最终仅保留最后一次快照同步的源库数据。

问题2:如何正确配置复制以实现数据聚合?理想情况下需每小时执行一次。

方案一:事务复制+自定义初始化(推荐)

  1. 提前手动在DataBase_Combined中创建与源库结构完全一致的Table1、Table2、Table3,确保主键、约束等与源表匹配。
  2. 分别为DataBase_A、DataBase_B、DataBase_C创建事务发布,包含各自的3张目标表。
  3. 配置订阅时,选择**“使用现有表”**作为初始化方式,跳过快照的表重建流程。此时事务复制会将源表的初始全量数据插入目标表,后续持续同步增量变更,且不会覆盖目标表中已有的其他源库数据。
  4. 若需每小时执行一次全量同步(而非实时增量),可搭配SQL Agent作业:
    • 编写增量插入脚本,例如:
      INSERT INTO DataBase_Combined.dbo.Table1
      SELECT * FROM DataBase_A.dbo.Table1
      WHERE NOT EXISTS (
          SELECT 1 FROM DataBase_Combined.dbo.Table1 t
          WHERE t.PrimaryKeyColumn = DataBase_A.dbo.Table1.PrimaryKeyColumn
      )
      
    • 创建每小时执行一次的SQL Agent作业,依次执行三个源库的数据同步脚本,避免重复插入数据。

方案二:自定义快照脚本(仅适用于全量聚合场景)

如果必须使用快照复制,可修改快照生成的.sch文件:

  1. 找到快照文件夹中的Table1.sch等文件,删除其中的DROP TABLE和CREATE TABLE语句。
  2. 替换为仅同步数据的逻辑,例如使用INSERT INTO ... SELECT而非重建表。
  3. 配置快照代理每小时生成一次快照并同步,确保每次仅追加数据而非覆盖。

注意:方案二需要手动维护快照脚本,灵活性较低,不如方案一稳定可靠。

内容的提问来源于stack exchange,提问作者Dmitriy Ryabin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:42:43