SQL Server 示例数据库 WideWorldImporters 失败 dbcc checkdb

Tom*_*ath 9 sql-server dbcc-checkdb sql-server-2019

问题陈述我刚刚在示例 WideWorldImporters 数据库上
运行。dbcc checkdb当我运行此命令时,我收到了 (4) 个有关统计数据损坏的错误,我不记得过去曾见过这些错误。虽然这只是一个示例数据库,但我很好奇,因为我不想在真实的数据库中看到类似的错误。

SSMS 和 Windows 版本
SSMS:18.10 (15.0.18390.0) / Windows 10:版本 21H1(操作系统内部版本 19043.1526)

SQL Server 开发人员版本
Microsoft SQL Server 2019 (RTM-CU13) (KB5005679) - 15.0.4178.1 (X64) 2021 年 9 月 23 日 16:47:49 版权所有 (C) 2019 Microsoft Corporation Developer Edition(64 位),适用于 Windows 10 Pro 10.0 (内部版本 19043:)

SSMS 中发出的命令:

dbcc checkdb ([WideWorldImporters]) with all_errormsgs, data_purity, extended_logical_checks , no_infomsgs;  
go
Run Code Online (Sandbox Code Playgroud)

错误信息

消息 9122,级别 16,状态 201,第 10 行
统计信息“sys.TT_OrderIDList_22AA2996.PK__TT_Order__C3905BAE80B57D6F”已损坏。
消息 9122,级别 16,状态 201,第 10 行
统计信息“sys.TT_OrderLineList_24927208.IX_Website_OrderLineList”已损坏。
消息 9122,级别 16,状态 201,第 10 行
统计信息“sys.TT_OrderList_25869641.PK__TT_Order__288FD689F5006DE2”已损坏。
消息 9122,级别 16,状态 201,第 10 行
统计信息“sys.TT_SensorDataList_276EDEB3.PK__TT_Senso__88385F3043E9E8D9”已损坏。
CHECKDB 在数据库“WideWorldImporters”中发现 0 个分配错误和 4 个一致性错误。

我尝试修复后
很快发现我没有删除 sys.* 索引所需的权限。我尝试从上次备份中恢复数据库,但这产生了完全相同的错误消息。

接下来,我打开此网页下载新副本:
https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0

我下载了“WideWorldImporters-Full.bak”(121 MB),清除了属性中的“Mark of the Web”(MOTW),并成功恢复了数据库。但是,在运行上面显示的相同 dbcc checkdb 命令后,我收到了完全相同的错误!

最后,我下载了“WideWorldImporters-Full.bacpac”(59.1 MB),清除了属性中的“Mark of the Web”(MOTW),并成功恢复了数据库。这也导致了上面所示的相同dbcc checkdb错误。

我显然不记得曾经收到过这些错误,这让我想知道我当前版本的 Windows、SSMS 或 SQL Developer 中是否存在导致这些错误的“问题”?

谢谢

Pau*_*ite 9

该错误消息有点误导。并不是与主键索引关联的统计对象已损坏;而是与主键索引相关的统计对象已损坏。相反,当指定 时,DBCC 检查统计数据损坏会遇到断言失败,EXTENDED_LOGICAL_CHECKS并且代码尝试获取 Hekaton 表类型索引的索引大小。EXTENDED_LOGICAL_CHECKS如果未指定,这些对象将被视为不受支持而被跳过。

当然,这是一个只有微软才能修复的错误,而且我确实意识到这对于现实世界的数据库来说不是问题。尽管如此,明显的解决方法是跳过EXTENDED_LOGICAL_CHECKS.

如果这并不理想,也可以通过在DBCC CHECKDB语句运行时暂时禁用 Hekaton 对象的自动统计信息更新来跳过有问题的检查。没有记录的方法可以执行此操作,但全局跟踪标志 9823 确实执行该功能:

DBCC TRACEON (9823, -1);

DBCC CHECKDB (WideWorldImporters) 
WITH 
    ALL_ERRORMSGS, 
    DATA_PURITY, 
    EXTENDED_LOGICAL_CHECKS, 
    NO_INFOMSGS;  

DBCC TRACEOFF (9823, -1);
Run Code Online (Sandbox Code Playgroud)

如果您没有 Microsoft 支持协议,或者不想完成该流程,您可以在http://aka.ms/sqlfeedback留下反馈。


此错误已在SQL Server 2019 CU17中修复


Ben*_*hul 6

我可以在 2019 CU15 开发者版上重现您的问题。我最初安装了 2019 RTM,并且 dbcc 恢复正常。

经过一些调查,这些统计信息似乎与用户定义的表类型相关联。我尝试仅删除/重新创建 UDT,但遇到了同样的问题。仅当从 UDT 中删除内存优化属性(并相应地更改相关过程)时,checkdb 才会恢复干净。

我建议向 MS 提出问题并指出他们自己的示例数据库。希望这能缩短他们的故障排除过程。