症状
应用SQL Server 2016 Service Pack 3 (SP3)或SQL Server 2017 累积更新 26 (CU26)后,运行更改跟踪清理存储过程sp_flush_commit_table_on_demand或sp_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:
每个新的累积更新SQL Server包含上一个累积更新中包含的所有修补程序和所有安全修补程序。 查看最新累积更新,了解SQL Server:
按需修补程序信息:
以下按需修补程序中修复了此问题,SQL Server:
解决方法
如果遇到此问题,请通过卸载 2016 SP3 或 SQL Server 2017 CU26 SQL Server上一版本。 Microsoft 正在积极调查此问题,当该信息可用时,它将使用更多信息和其他指南更新本文。
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
参考
了解 Microsoft 用于 描述软件更新的术语。