情境:
我正在与拥有实时数据库的客户合作。在单独的服务器上,它们具有此数据库的副本,并且它们具有事务复制设置,该设置不断运行。我有一个SSIS包,它在数据库副本上运行长达一个小时,以将数据导出到报告数据库。
当我在启用复制的情况下测试了包时,它偶尔会失败,因为它在执行的不同点从各个表中读取。问题在于,如果在早期阶段读取某些数据,随后将其删除/插入,则稍后读取的其他相关记录将成为孤立状态并导致查找失败。虽然我有各种各样的保护措施可以解决这个问题,但很难满足每一个案例,因为并非所有记录都有可用于限制数据的日期。
安排:
我一直在考虑暂停复制作业,以便程序包可以使用静态数据运行,然后在程序包运行后重新启用它。再次启用复制后,应将包执行期间生成的实时数据库中的所有事务应用于副本。
问题:
我已经完成了用于事务复制的各种Replication Agents的阅读,但我不完全确定暂停复制的最低要求是什么。
目前我正在考虑暂停Distribution Agent和Log Reader Agent以实现我想要做的事情。问题是,我是否需要暂停两个代理作业,还是可以暂停一个或另一个以便事务建立并在代理启用后应用?
我不确定其中某些内容是否依赖于特定配置或设置,但如果需要,我可以提供更多信息,因此如果需要更多信息,请发表评论。
答案 0 :(得分:1)
但我不完全确定暂停复制的最低要求是什么。
复制的工作原理如下
日志读取器代理从发布者读取事务日志并在分发器数据库中插入这些记录,并将这些日志标记为非活动状态(以便可以重用Tlog空间)
现在,Distributor DB读取这些记录并将其插入订户数据库..
现在,当您想要停止/暂停复制时,可以停止
1.日志阅读器代理
右键单击作业并停止
或
2.分销商代理 右键单击作业并停止
或
两个
问题是,我是否需要暂停两个代理作业,还是可以暂停一个或另一个以便事务建立并在代理启用后应用?
如果您只暂停经销商代理(我会这样做),日志阅读器将完成它的工作,并且对发布者的日志重用性没有影响
还有一些警告,如果复制延迟超过最大限制,则需要重新初始化复制。虽然这将是24小时的巨大
启用后,您还可以使用以下链接监控复制
https://www.brentozar.com/archive/2014/07/monitoring-sql-server-transactional-replication/