DBCC (Transact-SQL)
适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例
Transact-SQL 编程语言提供 DBCC 语句以作为 SQL Server 的数据库控制台命令。
数据库控制台命令语句可分为以下类别。
命令类别 | 执行 |
---|---|
维护 | 对数据库、索引或文件组进行维护的任务。 |
杂项 | 杂项任务,如启用跟踪标志或从内存中删除 DLL。 |
信息 | 收集并显示各种类型信息的任务。 |
验证 | 对数据库、表、索引、目录、文件组或数据库页的分配进行的验证操作。 |
DBCC 命令使用输入参数并返回值。 所有 DBCC 命令参数都可以接受 Unicode 和 DBCS 文字。
DBCC 内部数据库快照用法
以下 DBCC 命令对 数据库引擎创建的内部只读数据库快照执行操作。 此快照可防止在执行这些命令时出现阻塞和并发问题。 有关详细信息,请参阅数据库快照 (SQL Server)。
DBCC CHECKALLOC
DBCC CHECKCATALOG
DBCC CHECKDB
DBCC CHECKFILEGROUP
DBCC CHECKTABLE
在执行这些 DBCC 命令之一时,数据库引擎创建一个数据库快照,并将其置于在事务上一致的状态。 然后,DBCC 命令对该快照运行检查。 DBCC 命令完成后,将删除该快照。
有时,不需要内部数据库快照或无法创建内部数据库快照。 出现这种情况时,将针对实际数据库执行 DBCC 命令。 如果数据库联机,DBCC 命令使用表锁确保它所检查的对象的一致性。 该行为与指定了 WITH TABLOCK
选项时的行为相同。
执行 DBCC 命令时,不创建内部数据库快照:
- 针对
master
数据库,并且 SQL Server 的实例以单用户模式运行。 - 针对
master
之外的其他数据库,但已使用ALTER DATABASE
语句将该数据库置于单用户模式。 - 针对只读数据库。
- 针对已使用
ALTER DATABASE
语句设置为紧急模式的数据库。 - 针对
tempdb
。 在这种情况下,由于内部限制,无法创建数据库快照。 - 使用
WITH TABLOCK
选项。 在这种情况下,DBCC 允许该请求但不创建数据库快照。
当针对以下对象执行 DBCC 命令时,该命令将使用表锁而不是内部数据库快照:
- 只读文件组
- FAT 文件系统
- 不支持“命名流”的卷
- 不支持“备用流”的卷
注意
尝试使用 WITH TABLOCK
选项运行 DBCC CHECKALLOC
或 DBCC CHECKDB
的等价部分时,需要使用数据库独占 (X
) 锁。 该数据库锁不能对 tempdb
或 master
设置,对其他所有数据库进行设置时也可能会失败。
注意
如果无法创建内部数据库快照,则对 master
运行 DBCC CHECKDB
时将失败。
DBCC 命令的进度报告
sys.dm_exec_requests
目录视图包含有关 DBCC CHECKDB
、CHECKFILEGROUP
和 CHECKTABLE
命令的进度和当前执行阶段的信息。 percent_complete
列指示命令完成的百分比,command
列报告命令执行的当前阶段。
进度单位的定义取决于 DBCC 命令的当前执行阶段。 有时,根据数据库页的粒度报告进度,而在其他阶段,则根据单个数据库或分配修复的粒度报告进度。 下表对每个执行阶段以及命令报告进度的粒度进行了说明。
执行阶段 | 说明 | 进度报告粒度 |
---|---|---|
DBCC TABLE CHECK |
在该阶段中将检查数据库中对象的逻辑和物理一致性。 | 在数据库页级别报告进度。 每检查 1000 个数据库页更新进程报告值一次。 |
DBCC TABLE REPAIR |
如果指定了 REPAIR_FAST /REPAIR_REBUILD 或 REPAIR_ALLOW_DATA_LOSS ,并且存在必须修复的对象错误,则在该阶段执行数据库修复。 |
在单个修复级别报告进度。 每次完成修复时更新计数器。 |
DBCC ALLOC CHECK |
在该阶段中将检查数据库中的分配结构。 注意: DBCC CHECKALLOC 执行相同检查。 |
未报告进度 |
DBCC ALLOC REPAIR |
如果指定了 REPAIR_FAST 、REPAIR_REBUILD 或 REPAIR_ALLOW_DATA_LOSS ,并且存在必须修复的分配错误,则在该阶段执行数据库修复。 |
未报告进度。 |
DBCC SYS CHECK |
在该阶段中将检查数据库系统表。 | 在数据库页级别报告进度。 每检查 1000 个数据库页更新进程报告值一次。 |
DBCC SYS REPAIR |
如果指定了 REPAIR_FAST 、REPAIR_REBUILD 或 REPAIR_ALLOW_DATA_LOSS ,并且存在必须修复的系统表错误,则在该阶段执行数据库修复。 |
在单个修复级别报告进度。 每次完成修复时更新计数器。 |
DBCC SSB CHECK |
在该阶段中将检查 SQL Server Service Broker 对象。 注意:执行 DBCC CHECKTABLE 时,不执行此阶段。 |
未报告进度。 |
DBCC CHECKCATALOG |
在该阶段中将检查数据库目录的一致性。 注意:执行 DBCC CHECKTABLE 时,不执行此阶段。 |
未报告进度。 |
DBCC IVIEW CHECK |
在该阶段中将检查数据库中存在的任何索引视图的逻辑一致性。 | 在被检查的单个数据库视图级别报告进度。 |
信息语句
- DBCC INPUTBUFFER
- DBCC SHOWCONTIG
- DBCC OPENTRAN
- DBCC OUTPUTBUFFER
- DBCC PROCCACHE
- DBCC SHOW_STATISTICS
- DBCC SQLPERF
- DBCC TRACESTATUS
- DBCC USEROPTIONS
验证语句
- DBCC CHECKALLOC
- DBCC CHECKCATALOG
- DBCC CHECKCONSTRAINTS
- DBCC CHECKDB
- DBCC CHECKFILEGROUP
- DBCC CHECKIDENT
- DBCC CHECKTABLE
维护语句
- DBCC CLEANTABLE
- DBCC DBREINDEX
- DBCC DROPCLEANBUFFERS
- DBCC FREEPROCCACHE
- DBCC INDEXDEFRAG
- DBCC SHRINKDATABASE
- DBCC SHRINKFILE
- DBCC UPDATEUSAGE
杂项语句
- DBCC dllname (FREE)
- DBCC HELP
- DBCC FLUSHAUTHCACHE
- DBCC TRACEOFF
- DBCC FREESESSIONCACHE
- DBCC TRACEON
- DBCC FREESYSTEMCACHE
- DBCC CLONEDATABASE(适用于:SQL Server 2014 (12.x) Service Pack 2 及更高版本。)