手动删除 SQL 服务器中的更改跟踪记录

Manually delete change tracking records in SQL Server

我找不到任何方法在客户端更新后手动执行更改跟踪清理 table。这似乎是 SQL 服务器中更改跟踪的主要限制,除非我遗漏了什么。

也许我忽略了一些东西,但我想要完成的是在客户端从 SQL 服务器成功更新后删除更改 table 中的那些更改记录。那时不需要它们。

我知道的唯一配置是 2 天的保留期...等等。因为不同的 clients/people 会以非常不同的时间间隔同步,所以我唯一的选择似乎是设置一个非常大的保留期:例如365 天。但是这样做会导致膨胀,无法在更新所有客户端后清除。

因此似乎唯一的解决方法是手动创建触发器并维护我自己的删除 tables、更新 tables 等

有没有人找到更好的方法来管理这个而不是简单地不使用实施的更改跟踪功能?

没有完美的解决方案,但对于 space 密集型服务器,我删除了 table 并从副本重新创建,然后重新启用更改跟踪。这删除了那个 table 的所有更改跟踪记录。我这样做是作为定期维护的一部分。

我已使用 sys.sp_cdc_disable_db 在维护期间禁用更改跟踪以简化此过程。

在使用这种方法之前,我实现了自己的跟踪系统。但是由于复制、远程和故障转移服务器问题,跟踪所有这些更改变得非常复杂。这是一种痛苦,特别是如果一个人已经实现了自动恢复功能。开销不值得。

希望对您有所帮助。

将您的保留期设置为合理且有效的时间长度。如果客户端尝试使用过期版本(小于 sys.change_tracking_tables 中的 min_valid_version)进行同步,则它必须重新同步整个 table。希望您没有太多客户等待数月才能同步。如果是这样……至少他们不经常这样做。