暂停事务复制

Pausing Transactional Replication

场景:

我正在与拥有实时数据库的客户合作。在一个单独的服务器上,他们有这个数据库的副本,并且他们有事务复制设置,运行 不断。我有一个 SSIS 包,它 运行 在数据库的副本上保存长达一个小时,以将数据导出到报告数据库。

当我在启用复制的情况下测试包时,它偶尔会失败,因为它在不同的执行点从不同的表中读取。问题在于,如果某些数据在早期阶段被读取,随后会得到 deleted/inserted,其他稍后读取的相关记录实际上会变成孤立记录并导致查找失败。虽然我有各种保护措施来解决这个问题,但很难满足所有情况,因为并非所有记录都有我可以用来限制数据的日期。

计划:

我一直在考虑暂停复制作业,以便程序包可以 运行 使用静态数据,然后在程序包具有 运行 后重新启用它。再次启用复制后,包执行期间生成的实时数据库中的所有事务都应应用于副本。

问题:

我已经阅读了一些用于事务复制的各种 Replication Agents,但我不完全确定暂停复制的最低要求是什么。

目前我正在考虑暂停 Distribution Agent and the Log Reader Agent 来实现我想做的事情。问题是,我是否需要暂停两个代理作业,或者我是否可以暂停一个或另一个以便在启用代理后建立并应用事务?

我不确定其中一些是否取决于特定的配置或设置,但如果需要,我可以提供更多信息,因此如果需要更多信息,请发表评论。

but I'm not entirely sure what the minimum requirement is for pausing the replication.

复制工作如下

日志 reader 代理从发布者读取事务日志并将这些记录插入分发者数据库并将这些日志标记为非活动(以便 Tlog space 可以重复使用)

现在 Distributor DB 读取这些记录并将其插入订阅者数据库..

现在当你想stop/pause复制时,你可以停止

1.Logreader代理
右键单击作业并停止

2.Distributor代理
右键单击作业并停止

两者

The question is, do I need to pause both agent jobs or can I pause one or the other so that the transactions build up and are applied once the agent is enabled?

如果您只暂停分发代理(我也会这样做),日志 reader 将完成它的工作,并且不会对发布者的日志可重用性产生影响

还有一些注意事项,例如,如果复制延迟超过最大限制,您将需要重新初始化replication.Though这将是 24 小时这样的巨大

您还可以使用下面的link来监控复制,启用后

https://www.brentozar.com/archive/2014/07/monitoring-sql-server-transactional-replication/