标签: dbcc-checktable

DBCC CHECKTABLE 在空表上运行需要 15 分钟以上

我有一个数据库,其中 DBCC CHECKTABLE 在许多小表或空表上运行需要超过 15 分钟。当它完成时,没有失败或错误。服务器上其他所有内容的性能都处于非常可接受的状态。同时没有其他东西在运行。

我还尝试了 DBCC CLEANTABLE 并使用全扫描更新了统计信息。

我使用的是 SQL Server 2016 企业版 (13.0.5201.2)

示例表:

CREATE TABLE [Schema1].[Table1](
    [col1] [int] NOT NULL,
    [col2] [nvarchar](100) NOT NULL,
    [col3] [xml] NOT NULL,
 CONSTRAINT [PK_1] PRIMARY KEY CLUSTERED 
(
    [col1] ASC,
    [col2] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

sql-server dbcc sql-server-2016 dbcc-checktable

7
推荐指数
1
解决办法
479
查看次数

具有持久计算的 CLR 源数据的表标记为 has_unchecked_assembly_data = 1,但 DBCC CHECKTABLE 不会取消设置相同的标志

我们有一个带有列的 OrderLines 表:

Quantity int not null
QtyCancelled int not null
QtyBackorder int not null
QtyPicking int not null
QtyPacking int not null
QtyShiped int not null
Run Code Online (Sandbox Code Playgroud)

计算和持久化列 FulfillmentStatusId 为:

dbo.clr_GetFulfillmentStatusByLineQuantities(Quantity, QtyCancelled, QtyBackorder, QtyPicking, QtyPacking, QtyShiped)
Run Code Online (Sandbox Code Playgroud)

“clr_GetFulfillmentStatusByLineQuantities”,当然,通过标量函数映射到数据库中的 ASSEMBLY,关联方法 (C#) 标记为:

[SqlFunction(DataAccess = None, IsDeterministic = true, IsPrecise = true, SystemDataAccess = None)]
Run Code Online (Sandbox Code Playgroud)

参考这个问题,我已经多次针对这个表运行 DBCC CHECKTABLE ,它仍然保持为 has_unchecked_assembly_data=1。首次将列添加到表中时确实如此,但我相信 DBCC CHECKTABLE 命令在迁移到 SQL 2016 之前已成功。


尽管该表已使用很长时间且 has_unchecked_assembly_data=1,但似乎对该表的功能没有影响。我关心ALTER ASSEMBLY不使用时取消选中数据时,则抛出抛出异常的另一个异常,当我使用该选项,但出现的装配反正“根据MVID”进行更新。

对不起,如果我胡说八道,我不会问太多问题,我主要是潜伏的。

不过,提前致谢!


更新 (20180917T17:34-05:00):感谢 …

sql-server sql-clr computed-column dbcc-checktable

6
推荐指数
1
解决办法
154
查看次数

VLDB - 创建 SQL 数据库快照并运行精细的 DBCC CHECKDB 命令

我有一个 25TB db(SQL2008 Enterprise SP4),它似乎没有在生产中运行 CHECKDB。不知道它是否在某个时候针对恢复的备份运行。现在我没有空间在连接到同一存储的另一台服务器上恢复副本。

我需要能够运行 checkcatalog、checkalloc 和 checktable,但即使对于小表,它似乎也无法创建内部稀疏文件 dbcc 快照。

所以我想知道我是否可以在另一个驱动器上创建一个 SQL 数据库快照,然后针对它运行这些命令,然后在完成后删除快照数据库。

谢谢!

——托德

sql-server-2008 sql-server dbcc-checkdb vldb dbcc-checktable

2
推荐指数
1
解决办法
325
查看次数

DBCC CHECKDB 和 DBCC CHECKTABLE 在表级完整性检查上有什么具体区别吗?

我在其中一个数据库上运行 DBCC CHECKDB 时遇到了分配错误。它抛出以下错误:

消息 8947,级别 16,状态 1,第 5 行表错误:对象 ID 1277199566、索引 ID 1、分区 ID 720577176766669456、分配单元 ID 720577087666647328 的多个 IAM 页(类型 LOB 数据)包含间隔。IAM 页面 (1:425664) 和 (1:1422669)。

CHECKDB 在表“schemaName.tableName”(对象 ID 1277199566)中发现 1 个分配错误和 0 个一致性错误。CHECKDB 在数据库“databaseName”中发现 1 个分配错误和 0 个一致性错误。

奇怪的是,当我尝试在该表上运行 DBCC CHECKTABLE 时,它没有显示任何错误。此外,我尝试运行 CHECKTABLE WITH EXTENDED_LOGICAL_CHECKS 选项,但没有出现任何错误。

根据 Microsoft 文档:

要对数据库中的每个表执行 DBCC CHECKTABLE,请使用 DBCC CHECKDB。

对于指定的表,DBCC CHECKTABLE 检查以下内容:

  • 索引、行内、LOB 和行溢出数据页正确链接。
  • 索引按正确的排序顺序排列。
  • 指针是一致的。
  • 每页数据合理,包括计算列。
  • 页面偏移是合理的。
  • 基表中的每一行在每个非聚集索引中都有一个匹配的行,反之亦然。
  • 分区表或索引中的每一行都在正确的分区中。
  • 使用 FILESTREAM 在文件系统中存储 varbinary(max) 数据时文件系统和表之间的链接级一致性

但正如我所看到的,相反的情况并非如此。我们不能只对一张表运行 CHECKTABLE 并为同一张表获得相同的结果。

在检查特定对象的完整性和一致性方面,是否有人拥有与这两个命令之间的差异相关的信息?

sql-server dbcc-checkdb sql-server-2016 dbcc-checktable

0
推荐指数
1
解决办法
34
查看次数