一、定义
微软当初从SYBASE将DBCC是作为数据库一致性检查(Database Consistency Check)命令扩展过来的,但经过后来的扩展,DBCC命令的功能范围增大,现在称之为数据库控制台命令(Database Console Command)。
二、公开的DBCC命令
2.1验证类
对数据库、文件组、表、索引、数据库页的分配、系统目录进行的验证操作。
DBCC CHECKDB
对索引结构和数据完整性进行检查之外,它还包括对分配进行检查、对数据存储中使用的页信息进行验证。
仿佛是对数据库执行 DBCC CHECKALLOC 语句和每个表执行DBCC CHECKTABLE 语句。
DBCC CHECKFILEGROUP
对数据库中的所有文件组执行 DBCC CHECKFILEGROUP 语句与运行单个 DBCC CHECKDB 语句相同。唯一的差别在于:如果表的索引在不同文件组上,则将多次检查该表和索引(对包含表或其索引的每个文件组检查一次)。
DBCC CHECKTABLE
对表或索引视图的数据、索引及 text、ntext 和 image 页的完整性检查。
包括:
索引和数据页是否已正确链接。
索引是否按照正确的顺序排列。
各指针是否一致。
每页上的数据是否均合理。
页面偏移量是否合理。
text、ntext 和 image 页的链接及大小进行检查。
DBCC CHECKALLOC
对数据库中所有数据页的分配进行验证。
默认情况下,DBCC CHECKALLOC 不获取表锁。相反,它获取架构锁,该锁在 DBCC CHECKALLOC 正在执行时阻止对元数据(即DDL)进行更改,但允许更改数据(即DML)。
DBCC NEWALLOC
等同于 DBCC CHECKALLOC,为了向后兼容。
注:
(1)以上DBCC 语句收集信息,然后扫描日志以查找所做的任何其它更改,并在扫描的结尾将两组信息合并在一起以产生数据的一致性检查视图;
(2)DBCC往往大量占用 CPU 及磁盘,因为 DBCC 必须读取每个数据页,而这需要从磁盘到内存全都检查一遍(除非数据页已高速缓存到内存中)。当系统上有许多活动而运行 DBCC 时,系统活动和DBCC的性能都会被削弱。在SQL SERVER 2005以后,在执行这些 DBCC 命令之一时,数据库引擎创建一个数据库快照,并将其置于在事务上一致的状态,以防止在执行这些命令时出现阻塞和并发问题。然后,DBCC 命令对该快照运行检查。DBCC 命令完成后,将删除该快照。(在无法创建快照的情况下,或指定了 TABLOCK,则DBCC将获取一个共享表锁来获得所需的一致性,也就是说并不能保证DBCC完全摆脱阻塞的可能。)
DBCC CHECKCATALOG
对 syscolumns 中的每种数据类型在 systypes 中是否都有一个匹配项进行检查,同时还对 sysobjects 中