DBCC (Transact-SQL)DBCC (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL Azure нетAzure Synapse Analytics (хранилище данных SQL) нетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Язык Transact-SQLTransact-SQL предоставляет инструкции DBCC, которые выступают в качестве консольных команд базы данных для SQL ServerSQL Server.The Transact-SQLTransact-SQL programming language provides DBCC statements that act as Database Console Commands for SQL ServerSQL Server.

Инструкции консольных команд базы данных группируются по следующим категориям.Database Console Command statements are grouped into the following categories.

Категория командыCommand category ВыполнениеPerform
ОбслуживаниеMaintenance Обслуживание задач в базе данных, индексе или в файловой группе.Maintenance tasks on a database, index, or filegroup.
РазноеMiscellaneous Вспомогательные задачи, например установка флага трассировки или удаление из памяти библиотеки DLL.Miscellaneous tasks such as enabling trace flags or removing a DLL from memory.
InformationalInformational Задачи, собирающие и отображающие разные типы сведений.Tasks that gather and display various types of information.
ПроверкаValidation Проверочные операции в базе данных, таблице, индексе, каталоге, в файловой группе или распределение страниц базы данных.Validation operations on a database, table, index, catalog, filegroup, or allocation of database pages.

Команды DBCC принимают входные параметры и возвращают значения.DBCC commands take input parameters and return values. Все команды DBCC могут принимать в качестве параметров как литералы в Юникоде, так и литералы в двухбайтовой кодировке.All DBCC command parameters can accept both Unicode and DBCS literals.

Использование внутреннего моментального снимка базы данных в командах DBCCDBCC Internal Database Snapshot Usage

Следующие команды DBCC выполняют операции с внутренним моментальным снимком базы данных, предназначенным только для чтения, который создает компонент Компонент Database EngineDatabase Engine.The following DBCC commands operate on an internal read-only database snapshot that the Компонент Database EngineDatabase Engine creates. Тем самым предотвращаются проблемы блокировки и параллелизма при выполнении этих команд.This prevents blocking and concurrency problems when these commands are executed. Дополнительные сведения см. в разделе Моментальные снимки базы данных (SQL Server).For more information, see Database Snapshots (SQL Server).

  • DBCC CHECKALLOCDBCC CHECKALLOC
  • DBCC CHECKCATALOGDBCC CHECKCATALOG
  • DBCC CHECKDBDBCC CHECKDB
  • DBCC CHECKFILEGROUPDBCC CHECKFILEGROUP
  • DBCC CHECKTABLEDBCC CHECKTABLE

При выполнении одной из этих команд DBCC компонент Компонент Database EngineDatabase Engine создает моментальный снимок базы данных и приводит ее в согласованное состояние на уровне транзакций.When you execute one of these DBCC commands, the Компонент Database EngineDatabase Engine creates a database snapshot and brings it to a transactionally consistent state. Затем команда DBCC выполняет проверку этого моментального снимка.The DBCC command then runs the checks against this snapshot. После завершения команды DBCC этот моментальный снимок удаляется.After the DBCC command is completed, this snapshot is dropped.

Иногда внутренний моментальный снимок базы данных не требуется или его невозможно создать.Sometimes an internal database snapshot is not required or cannot be created. В этом случае команда DBCC выполняется в отношении реальной базы данных.When this occurs, the DBCC command executes against the actual database. Если база данных находится в режиме в сети, команда DBCC использует блокировку таблиц для обеспечения согласованности проверяемых объектов.If the database is online, the DBCC command uses table-locking to ensure the consistency of the objects that it is checking. Это поведение то же самое, как если бы был указан параметр WITH TABLOCK.This behavior is the same as if the WITH TABLOCK option were specified.

Внутренний моментальный снимок базы данных не создается, если команда DBCC выполняется:An internal database snapshot is not created when a DBCC command is executed:

  • в базе данных master, если экземпляр SQL ServerSQL Server выполняется в однопользовательском режиме;Against master, and the instance of SQL ServerSQL Server is running in single-user mode.
  • в базе данных, отличной от master, если эта база данных была переведена в однопользовательский режим инструкцией ALTER DATABASE;Against a database other than master, but the database has been put in single-user mode by using the ALTER DATABASE statement.
  • в базе данных, предназначенной только для чтения;Against a read-only database.
  • в базе данных, которая была переведена в аварийный режим инструкцией ALTER DATABASE;Against a database that has been set in emergency mode by using the ALTER DATABASE statement.
  • в базе данных tempdb.Against tempdb. В этом случае моментальный снимок базы данных невозможно создать из-за внутренних ограничений;In this case, a database snapshot cannot be created because of internal restrictions.
  • с использованием параметра WITH TABLOCK.Using the WITH TABLOCK option. В этом случае команда DBCC соблюдает ограничение запроса и не создает моментальный снимок.In this case, DBCC honors the request by not creating a database snapshot.

Команды DBCC используют блокировки таблиц, а не внутренние моментальные снимки базы данных, если выполняются:The DBCC commands use table locks instead of the internal database snapshots when the command is executed against the following:

  • в файловой группе, предназначенной только для чтения;A read-only filegroup
  • в файловой системе FAT;An FAT file system
  • в томе, который не поддерживает «именованные потоки»;A volume that does not support 'named streams'
  • в томе, который не поддерживает «альтернативные потоки».A volume that does not support 'alternate streams'

Примечание

Для запуска команды DBCC CHECKALLOC или эквивалентной части DBCC CHECKDB с параметром WITH TABLOCK требуется X-блокировка базы данных.Trying to run DBCC CHECKALLOC, or the equivalent part of DBCC CHECKDB, by using the WITH TABLOCK option requires a database X lock. Такую блокировку нельзя устанавливать для базы данных tempdb или master: это может привести к ошибкам во всех остальных базах данных.This database lock cannot be set on tempdb or master and will probably fail on all other databases.

Примечание

Команда DBCC CHECKDB вызывает ошибку при выполнении в базе данных master, если невозможно создать внутренний моментальный снимок базы данных.DBCC CHECKDB fails when it is run against master if an internal database snapshot cannot be created.

Формирование отчета о состоянии команд DBCCProgress Reporting for DBCC Commands

В представлении каталога sys.dm_exec_requests содержатся сведения о ходе выполнения и текущем этапе выполнения команд DBCC CHECKDB, CHECKFILEGROUP и CHECKTABLE.The sys.dm_exec_requests catalog view contains information about the progress and the current phase of execution of the DBCC CHECKDB, CHECKFILEGROUP, and CHECKTABLE commands. В столбце percent_complete указывается процент выполнения команды, а в столбце command отображается текущий этап ее выполнения.The percent_complete column indicates the percentage complete of the command, and the command column reports the current phase of the execution of the command.

Определение единицы хода выполнения зависит от текущего этапа выполнения команды DBCC.The definition of a unit of progress depends on the current phase of execution of the DBCC command. Иногда отчет о состоянии формируется на уровне гранулярности страницы базы данных, на других этапах — на уровне гранулярности одной базы данных или исправления распределения пространства.Sometimes progress is reported at the granularity of a database page, in other phases it is reported at the granularity of a single database or allocation repair. В следующей таблице представлены все этапы выполнения и уровень гранулярности, на котором команда формирует отчет о состоянии.The following table describes each phase of execution, and the granularity at which the command reports progress.

Этап выполненияExecution phase ОписаниеDescription Уровень гранулярности отчетов о состоянииProgress reporting granularity
DBCC TABLE CHECKDBCC TABLE CHECK Во время этого этапа проверяется логическая и физическая согласованность объектов в базе данных.The logical and physical consistency of the objects in the database is checked during this phase. Отчет о состоянии сформирован на уровне страниц базы данных.Progress reported at the database page level.

Значение отчета о состоянии обновляется через каждые 1000 проверенных страниц базы данных.The progress reporting value is updated for each 1000 database pages that are checked.
DBCC TABLE REPAIRDBCC TABLE REPAIR Во время этого этапа выполняются исправления базы данных, если указывается параметр REPAIR_FAST, REPAIR_REBUILD или REPAIR_ALLOW_DATA_LOSS и имеются ошибки на уровне объектов.Database repairs are performed during this phase if REPAIR_FAST, REPAIR_REBUILD, or REPAIR_ALLOW_DATA_LOSS is specified, and there are object errors that must be repaired. Отчет о состоянии сформирован на уровне отдельных исправлений.Progress reported at the individual repair level.

Счетчик обновляется для каждой завершенной операции исправления.The counter is updated for each repair that is completed.
DBCC ALLOC CHECKDBCC ALLOC CHECK Во время этого этапа проверяются структуры распределения.Allocation structures in the database are checked during this phase.

Примечание. Те же проверки выполняет команда DBCC CHECKALLOC.Note: DBCC CHECKALLOC performs the same checks.
О состоянии не сообщаетсяProgress is not reported
DBCC ALLOC REPAIRDBCC ALLOC REPAIR Во время этого этапа выполняются исправления базы данных, если указывается параметр REPAIR_FAST, REPAIR_REBUILD или REPAIR_ALLOW_DATA_LOSS и имеются ошибки на уровне распределения пространства.Database repairs are performed during this phase if REPAIR_FAST, REPAIR_REBUILD, or REPAIR_ALLOW_DATA_LOSS is specified, and there are allocation errors that must be repaired. О состоянии не сообщается.Progress is not reported.
DBCC SYS CHECKDBCC SYS CHECK Во время этого этапа проверяются системные таблицы базы данных.Database system tables are checked during this phase. Отчет о состоянии сформирован на уровне страниц базы данных.Progress reported at the database page level.

Значение отчета о состоянии обновляется через каждую 1 000 проверенных страниц базы данных.The progress reporting value is updated for every 1000 database pages that are checked.
DBCC SYS REPAIRDBCC SYS REPAIR Во время этого этапа выполняются исправления базы данных, если указывается параметр REPAIR_FAST, REPAIR_REBUILD или REPAIR_ALLOW_DATA_LOSS и имеются ошибки на уровне системных таблиц.Database repairs are performed during this phase if REPAIR_FAST, REPAIR_REBUILD, or REPAIR_ALLOW_DATA_LOSS is specified, and there are system table errors that must be repaired. Отчет о состоянии сформирован на уровне отдельных исправлений.Progress reported at the individual repair level.

Счетчик обновляется для каждой завершенной операции исправления.The counter is updated for each repair that is completed.
DBCC SSB CHECKDBCC SSB CHECK Во время этого этапа проверяются объекты компонента SQL ServerSQL Server Service Broker.SQL ServerSQL Server Service Broker objects are checked during this phase.

Примечание. Этот этап не выполняется при выполнении инструкции DBCC CHECKTABLE.Note: This phase is not executed when DBCC CHECKTABLE is executed.
О состоянии не сообщается.Progress is not reported.
DBCC CHECKCATALOGDBCC CHECKCATALOG Во время этого этапа проверяется согласованность каталогов базы данных.The consistency of database catalogs are checked during this phase.

Примечание. Этот этап не выполняется при выполнении инструкции DBCC CHECKTABLE.Note: This phase is not executed when DBCC CHECKTABLE is executed.
О состоянии не сообщается.Progress is not reported.
DBCC IVIEW CHECKDBCC IVIEW CHECK Во время этого этапа проверяется логическая согласованность всех индексированных представлений базы данных.The logical consistency of any indexed views present in the database is checked during this phase. Отчет о состоянии сформирован на уровне отдельных представлений баз данных.Progress reported at the level of the individual database view that is being checked.

Информационные инструкцииInformational Statements

DBCC INPUTBUFFERDBCC INPUTBUFFER DBCC SHOWCONTIGDBCC SHOWCONTIG
DBCC OPENTRANDBCC OPENTRAN DBCC SQLPERFDBCC SQLPERF
DBCC OUTPUTBUFFERDBCC OUTPUTBUFFER DBCC TRACESTATUSDBCC TRACESTATUS
DBCC PROCCACHEDBCC PROCCACHE DBCC USEROPTIONSDBCC USEROPTIONS
DBCC SHOW_STATISTICSDBCC SHOW_STATISTICS

Инструкции проверкиValidation Statements

DBCC CHECKALLOCDBCC CHECKALLOC DBCC CHECKFILEGROUPDBCC CHECKFILEGROUP
DBCC CHECKCATALOGDBCC CHECKCATALOG DBCC CHECKIDENTDBCC CHECKIDENT
DBCC CHECKCONSTRAINTSDBCC CHECKCONSTRAINTS DBCC CHECKTABLEDBCC CHECKTABLE
DBCC CHECKDBDBCC CHECKDB

Инструкции обслуживанияMaintenance Statements

DBCC CLEANTABLEDBCC CLEANTABLE DBCC INDEXDEFRAGDBCC INDEXDEFRAG
DBCC DBREINDEXDBCC DBREINDEX DBCC SHRINKDATABASEDBCC SHRINKDATABASE
DBCC DROPCLEANBUFFERSDBCC DROPCLEANBUFFERS DBCC SHRINKFILEDBCC SHRINKFILE
DBCC FREEPROCCACHEDBCC FREEPROCCACHE DBCC UPDATEUSAGEDBCC UPDATEUSAGE

Вспомогательные инструкцииMiscellaneous Statements

DBCC dllname (FREE)DBCC dllname (FREE) DBCC HELPDBCC HELP
DBCC FLUSHAUTHCACHEDBCC FLUSHAUTHCACHE DBCC TRACEOFFDBCC TRACEOFF
DBCC FREESESSIONCACHEDBCC FREESESSIONCACHE DBCC TRACEONDBCC TRACEON
DBCC FREESYSTEMCACHEDBCC FREESYSTEMCACHE DBCC CLONEDATABASEDBCC CLONEDATABASE

Область применения: SQL Server 2014 (12.x)SQL Server 2014 (12.x) с пакетом обновления 2 (SP2) и выше.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) SP2 and later.