以下 DBCC 命令对 数据库引擎 创建的内部只读数据库快照执行操作。这样可以防止在执行这些命令时出现阻塞和并发问题。有关详细信息,请参阅数据库快照。
|
DBCC CHECKALLOC
|
DBCC CHECKDB
|
|
DBCC CHECKCATALOG
|
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 时将失败。
|