应用对象
SQL Server 2016 SQL Server 2017 on Linux SQL Server 2017 on Windows SQL Server 2016 Service Pack 3 - duplicate (do not use)

症状

应用SQL Server 2016 Service Pack 3 (SP3)SQL Server 2017 累积更新 26 (CU26)后,运行更改跟踪清理存储过程sp_flush_commit_table_on_demandsp_flush_CT_internal_table_on_demand,或者如果运行更改跟踪自动清理,将收到以下错误消息:

Msg 8114, Level 16, State 1, Procedure sp_add_ct_history, Line LineNumber

Error converting data type numeric to int.

此外,可能会将以下错误记录到SQL Server日志中:

DateTime spidNum     Error: 22122, Severity: 16, State: 1.

DateTime spidNum     Change Tracking autocleanup failed on side table of "table_name". If the failure persists, use sp_flush_CT_internal_table_on_demand to clean up expired records from its side table.

遇到此错误后,更改跟踪自动清理无法清理侧表或 syscommittab 表中的条目。

原因

SQL Server 2016 SP3 和 SQL Server 2017 CU26 引入了新表dbo。MSchange_tracking_history, 和新的存储过程sys.sp_add_ct_history,用于记录更改跟踪清理的历史记录。 此表有一个列cleanup_version,它当前声明为 INT 数据类型。 存储sys.sp_add_ct_history 包含参数 @cleanup_version ,该参数也声明为 INT。 在使用更改跟踪的繁忙系统中,清理版本可以跨给定时间间隔的 INT 范围。 然后,当更改跟踪清理运行时,它会尝试在此表的 INT 列中插入 BIGINT 值。 这会生成"症状"部分中所述的错误。

解决方法

此问题已针对以下更新的累积更新SQL Server:

2017 年 SQL Server 日累积更新 27

每个新的累积更新SQL Server包含上一个累积更新中包含的所有修补程序和所有安全修补程序。 查看最新累积更新,了解SQL Server:

SQL Server 2017 的最新累计更新

按需修补程序信息:

以下按需修补程序中修复了此问题,SQL Server:

解决方法

如果遇到此问题,请通过卸载 2016 SP3 或 SQL Server 2017 CU26 SQL Server上一版本。 Microsoft 正在积极调查此问题,当该信息可用时,它将使用更多信息和其他指南更新本文。

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

参考

了解 Microsoft 用于 描述软件更新的术语。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。