仅物理checkdb失败,但完整的一个成功完成


13

我正在执行带有physical_only选项的checkdb,并且失败,并显示以下多个错误:

消息8965,级别16,状态1,第1行
表错误:对象ID 1557580587,索引ID 1,分区ID 72057594088456192,分配单元ID 72057594177454080(类型为行内数据)。页面(1:13282192),插槽3,文本ID 6370769698816的行外数据节点由页面(0:0),插槽0引用,但未在扫描中看到。
消息8965,级别16,状态1,第1行
表错误:对象ID 1557580587,索引ID 1,分区ID 72057594088456192,分配单元ID 72057594177454080(类型为行内数据)。页面(1:13282192)插槽5的行外数据节点由页面(0:0)插槽0引用文本ID 6370769764352,但在扫描中未看到。
CHECKDB在表'TableX'(对象ID 1557580587)中发现了0个分配错误和5255个一致性错误
CHECKDB在数据库'DatabaseX'中发现0个分配错误和5255个一致性错误。repair_allow_data_loss是DBCC CHECKDB(DWH_LAND)发现的错误的最低修复级别。

但是完整的checkdb是成功的:

CHECKDB在数据库'DatabaseX'中发现0个分配错误和0个一致性错误。DBCC执行完成。如果DBCC打印了错误消息,请与系统管理员联系。


TableX大约有20万行,并在其上具有群集的列存储索引。
我们正在使用以下版本的SQL Server:
Microsoft SQL Server 2017(RTM-CU13)(KB4466404)-14.0.3048.4

我应该担心吗?

Answers:


13

是的,这是SQL Server 2017 CU14以下的缺陷。SQL Server 2016中的非聚集列存储索引存在类似问题。

在此视频中详细介绍:SQL Server 2017和ColumnStore索引的CHECKDB错误

这个问题的更便于移植的再现是:

SELECT *, CONVERT(NVARCHAR(MAX), m.text + m.text + m.text + m.text + m.text) AS texty
INTO dbo.corrupt
FROM sys.messages AS m;

CREATE CLUSTERED COLUMNSTORE INDEX cx_corrupt ON dbo.corrupt;

DBCC CHECKDB WITH PHYSICAL_ONLY;

DROP TABLE dbo.corrupt;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.