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

事务复制数据库添加新表:无需重建发布及新快照可行吗?

事务复制中添加新表的高效方案(无需重建发布/全量快照)

嗨Travis,刚好处理过不少生产环境下的事务复制扩容问题,完全不用删除重建整个发布,也不用生成全量快照——这对怕锁、怕停机的生产库太友好了!下面给你一步步拆解操作:

一、快速将新表添加到现有发布

有两种方式可选,看你习惯用图形界面还是命令行:

方式1:SSMS图形界面操作

  • 打开SQL Server Management Studio,连接到发布服务器
  • 展开「复制」→「本地发布」,找到你的目标发布,右键选择「属性」
  • 在弹出的属性窗口中切换到「项目」标签页,点击「添加」按钮
  • 在列表里选中你新建的两张表,确认后保存即可(如果需要自定义复制规则,比如过滤列、设置同步选项,可在这一步调整)

方式2:T-SQL命令行操作(更适合自动化/生产环境批量操作)

先执行sp_addarticle添加每张表到发布,再用sp_addsubscription配置订阅端同步:

-- 添加第一张新表到发布
EXEC sp_addarticle 
    @publication = N'你的发布名称',
    @article = N'NewTable1',
    @source_object = N'NewTable1',
    @source_owner = N'dbo', -- 表的所属架构,按需修改
    @destination_table = N'NewTable1',
    @destination_owner = N'dbo',
    @type = N'logbased', -- 事务复制必须选logbased类型
    @schema_option = 0x000000000803509D; -- 默认的事务复制表架构选项,可根据需求调整

-- 添加第二张新表到发布
EXEC sp_addarticle 
    @publication = N'你的发布名称',
    @article = N'NewTable2',
    @source_object = N'NewTable2',
    @source_owner = N'dbo',
    @destination_table = N'NewTable2',
    @destination_owner = N'dbo',
    @type = N'logbased',
    @schema_option = 0x000000000803509D;

-- 配置推送订阅(如果是拉取订阅,把@subscription_type改成N'Pull')
EXEC sp_addsubscription 
    @publication = N'你的发布名称',
    @article = N'NewTable1',
    @subscriber = N'订阅服务器名称',
    @destination_db = N'订阅端数据库名称',
    @subscription_type = N'Push';

EXEC sp_addsubscription 
    @publication = N'你的发布名称',
    @article = N'NewTable2',
    @subscriber = N'订阅服务器名称',
    @destination_db = N'订阅端数据库名称',
    @subscription_type = N'Push';

二、快照处理:仅生成新表的快照,无需全量重建

划重点:不需要生成整个发布的全新快照,只需要为新增的两张表生成「增量快照片段」即可,锁的范围仅局限于这两张新表,对现有业务几乎无影响:

方式1:SSMS操作

  • 回到发布的属性窗口,切换到「快照」标签页
  • 点击「生成快照」,在弹出的对话框中选择「仅生成新添加项目的快照」(这个选项会自动跳过已同步的现有表,只处理新增的表)

方式2:T-SQL命令行操作

执行以下命令启动快照生成,系统会自动识别仅需要同步的新表:

EXEC sp_startpublication_snapshot @publication = N'你的发布名称';

三、生产环境注意事项

  • 主键要求:事务复制要求被复制的表必须有主键,如果你的新表没加主键,先补加后再添加到发布
  • 锁的影响:生成新表快照时,只会锁定这两张新表,且锁的时间很短(数据量越小,耗时越短),完全适合夜间停机窗口执行
  • 数据同步:如果新表已有数据,快照会把初始数据同步到订阅端;如果是空表,仅同步表结构
  • 前置检查:操作前先确认现有复制链路状态正常(可通过SSMS的「复制监视器」查看),避免新增表时引入额外问题

内容的提问来源于stack exchange,提问作者Travis Brand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:10:05