Hotfix and Security Content Publishing:
症状
假设你在 SQL Server 2017 中启用了一个或多个表的更改跟踪,并设置了"AUTO_CLEANUP = ON"。 您注意到,即使在 syscommittab 系统表中,也不会删除或清理任何行, 保留期。 此外,你还会注意到以下症状:
-
如果您使用专用管理员连接进行连接,并查询无效的清理和强化的清理版本,则会发现它们是否定的:
从 sysobjvalues 中选择 *,其中 valclass = 7 和 objid = 1003--无效
从 sysobjvalues 中选择 *,其中 valclass = 7 和 objid = 1004--加固
-
如果你运行以下 SP 以手动清理 syscommittab,它将不执行清理操作,并将强化的清理版本视为负:
exec sp_flush_commit_table_on_demand
输出
Change_tracking_hardened_cleanup_version ()返回的值为-nnnnnn。
-
如果在更改跟踪自动清理期间收集带有事件 change_tracking_cleanup 的扩展事件会话,你将注意到 CleanupStatusChange 设置为32(error),并且存在清理工作:
状态
Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。
解决方案
在 SQL Server 的以下累积更新中修复了此问题:
关于 SQL Server 的累积更新:
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
注意 若要解决此问题,你需要启用跟踪标记8290并让自动清理进程运行。 启用此跟踪标志后,更改跟踪自动清理过程会将无效的清理版本重置为基于保留期的清理版本。 可以在会话级别或启动级别启用此跟踪标志。 为了 了解清理版本变为负值的根本原因,建议您致电支持部门并提供更多详细信息。
参考
了解 Microsoft 用于描述软件更新的术语。
Bug Information:
-
Bug #: 13312017 (sqlbuvsts01)
-
Bug #: 113039 (Content Idea)
KE: v-sidong
Author:
Writer: v-sidong
Tech reviewer: tzakir; akbarf; lzhang
Editor: v-jizho