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

SQL Server快照复制异常:D到E库数据丢失及对象名无效问题求助

SQL Server 发布订阅数据消失问题排查方案

核心排查方向

1. 确认发布类型与快照配置

  • 检查D→E的发布类型:若为快照发布,且快照代理调度设为每10秒运行,默认会在目标库执行DROP TABLE + CREATE TABLE操作(若开启「初始化时删除目标对象」),直接清空数据,同时表重建过程中会触发Invalid object name错误。其他订阅大概率是事务发布,因此无此问题。
  • 操作路径:SSMS → 展开复制→本地发布→右键目标发布→属性→「快照」选项卡,核对调度频率与「初始化时删除目标对象」状态。

2. 拆解发布作业的执行逻辑

  • 打开SQL Server Agent,找到D→E对应的发布作业,查看作业步骤的具体命令:
    • 检查是否包含触发快照初始化的命令(如调用distrib.exe时带强制初始化参数,或执行sp_refreshsubscriptions触发全量同步)。
    • 查看作业历史记录,筛选每次运行时的执行日志,确认是否存在DROP TABLE/CREATE TABLE的执行痕迹。

3. 排查目标库E的自定义操作

  • 检查E库同步表的触发器:是否存在DELETE/INSTEAD OF触发器,在同步触发时删除数据;或触发器逻辑错误导致表重建。
  • 核对E库的SQL Server Agent作业:是否有10秒间隔的作业,执行清空表或重建表的操作,与发布调度时间重合。
  • 检查E库中是否有依赖同步表的存储过程、作业,在同步事件触发时执行了表修改操作。

4. 分析复制同步日志与冲突策略

  • 打开复制监视器,查看D→E订阅的同步详细日志,定位每次数据消失时的操作记录,确认是发布端触发的表重建,还是目标端的主动删除。
  • 若为事务发布,检查冲突解决策略:是否设置为「强制覆盖目标数据」,且发布端存在错误的过滤条件,导致同步时删除目标库中不符合条件的数据。

5. 验证表结构与代理权限

  • 重新对比D、E库的同步表结构:重点核对主键、IDENTITY属性、约束定义的一致性(微小差异可能触发同步时的表重建)。
  • 检查复制代理账号权限:确认该账号是否在E库拥有ALTER TABLE/DROP TABLE权限,而其他订阅的代理账号权限更严格,限制了此类操作。

临时修复建议

若排查确认是快照发布每10秒全量同步导致的问题:

  • 修改发布类型为事务发布,仅在初始化时执行一次快照,后续通过事务日志增量同步。
  • 调整快照代理调度,改为仅在初始化或结构变更时手动运行,取消10秒自动调度。

内容的提问来源于stack exchange,提问作者Manish Joisar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:25:04