CHANGE_TRACKING_CURRENT_VERSION() 在备用数据库上不正确

Leo*_*onG 6 sql-server sql-server-2012 change-tracking

多年来,我们一直在使用变更跟踪解决方案来导出用于 BI 目的的增量。但它直接在生产数据库上运行。为了降低系统负载,我们希望它在一组单独的数据库上运行。

我们通过恢复备份和添加事务日志备份来创建这些数据库。数据库处于备用模式,所以只读。

切换到这些新数据库后,我们开始在处理增量并检查计数与我们随增量提供的总计数后看到差异。

差异通常只是每个表的几条记录,但在具有数百万行且频繁发生数千次变异的表上。并且事务日志备份每 15 分钟完成一次。而且这些更改看起来比这些备份之一的内容要小得多。

所以我们觉得这与未提交的事务有关。

我们发现了这个,它解释了一个类似的问题:

更改跟踪当前版本并不总是可靠的

但是使用MAX(commit_ts)fromsys.dm_tran_commit_table而不是的解决方案CHANGE_TRACKING_CURRENT_VERSION()似乎并没有解决差异。

由于变更跟踪功能似乎也在内部使用当前版本。

在追加另一个事务日志备份后,先前返回的变更跟踪版本似乎再次与数据一致。还将数据库联机,也解决了该问题。

使数据库联机不是一种选择,因为我们每天都需要再次进行完全恢复以使数据保持最新。与当前情况相比,新恢复的数据库的性能相当糟糕。

问题是,我们如何从处于待机模式的数据库中获取最后一个一致的更改跟踪版本。