我有一个非常大的表,我需要从中提取记录的子集,最近30天的记录,并将此30天记录复制到第二个数据库,以便进行报告。现在我正在使用事务复制,我在发布的文章中添加了一个过滤器来隔离30天的记录,以获得近乎实时的复制环境。
我遇到的问题是:复制似乎是增量的,这意味着最新的记录会添加到副本中,但旧的记录不会被删除,因此它会不断变大。
当超出过滤条件的记录更新并在过滤条件下再次进入时,复制会因“重复主键错误”而崩溃。
如何使其工作以使副本仅包含最近30天的数据? 上述行为是否是我期望看到的?
非常感谢,
答案 0 :(得分:1)
最简单的方法是不使用mssql的过滤器。最简单的方法是使用自定义sps更改用于更新和删除的SPS,以便在删除(缺少行)和更新(缺少行)时不会出错。这是通过文章的高级属性完成的。如果删除,您应该使用合并并过滤您的标准。
还有一个作业可以从表中删除您需要删除的内容。 当然,在进行结构更新时你需要非常小心,但它是可行的。
另一种更丑陋的方法是保留sql的存储过程并忽略错误(通过分发代理程序..-SkipErrors 2601:2627:20598)。这将再次需要删除旧行的作业,并且它不会将刚刚更新的旧行返回到您的作用域。总而言之,第一个解决方案应该是最好的解决方案。
希望它有所帮助。