DBCC (Transact-SQL)

Язык Transact-SQL предоставляет инструкции DBCC, которые выступают в качестве консольных команд базы данных для SQL Server 2005.

Инструкции консольных команд базы данных группируются по следующим категориям.

Категория команды Выполнение

Обслуживание

Обслуживание задач в базе данных, индексе или в файловой группе.

Вспомогательные

Вспомогательные задачи, например установка флага трассировки или удаление из памяти библиотеки DLL.

Информационные

Задачи, собирающие и отображающие разные типы сведений.

Проверочные

Проверочные операции в базе данных, таблице, индексе, каталоге, в файловой группе или распределение страниц базы данных.

Команды DBCC принимают входные параметры и возвращают значения. Все команды DBCC могут принимать в качестве параметров как текст Юникод, так и литералы с двухбайтовой кодировкой.

Использование выходных данных результирующего набора команд DBCC

Многие команды DBCC могут выводить данные в табличном формате с помощью параметра WITH TABLERESULTS. Эти данные могут загружаться в таблицу для дальнейшего использования. Ниже представлен пример сценария:

-- Create the table to accept the results.
CREATE TABLE #tracestatus (
   TraceFlag int,
   Status int
   )

-- Execute the command, putting the results in the table.
INSERT INTO #tracestatus 
   EXEC ('DBCC TRACESTATUS (-1) WITH NO_INFOMSGS')

-- Display the results.
SELECT * 
FROM #tracestatus
GO

Команды DBCC использования внутреннего моментального снимка базы данных

Следующие команды DBCC выполняют операции с внутренним моментальным снимком базы данных, предназначенным только для чтения, который создает компонент SQL Server Database Engine. Тем самым предотвращаются проблемы блокировки и параллелизма при выполнении этих команд. Дополнительные сведения см. в разделе Моментальные снимки базы данных.

DBCC CHECKALLOC

DBCC CHECKDB

DBCC CHECKCATALOG

DBCC CHECKFILEGROUP

DBCC CHECKTABLE

 

При выполнении одной из этих команд DBCC компонент Database Engine создает моментальный снимок базы данных и приводит ее в согласованное состояние на уровне транзакций. Затем команда DBCC выполняет проверку этого моментального снимка. После завершения команды DBCC этот моментальный снимок удаляется.

Иногда внутренний моментальный снимок базы данных не требуется или его невозможно создать. В этом случае команда DBCC выполняется в отношении реальной базы данных. Если база данных находится в оперативном режиме, команда DBCC использует блокировку таблиц для обеспечения согласованности проверяемых объектов. Это поведение то же самое, как если бы был указан параметр WITH TABLOCK.

Внутренний моментальный снимок базы данных не создается, если команда DBCC выполняется:

  • в базе данных master, если экземпляр SQL Server выполняется в однопользовательском режиме;
  • в базе данных, отличной от master, если эта база данных была переведена в однопользовательский режим инструкцией ALTER DATABASE;
  • в базе данных, предназначенной только для чтения;
  • в базе данных, которая была переведена в аварийный режим инструкцией ALTER DATABASE;
  • в базе данных tempdb. В этом случае моментальный снимок базы данных невозможно создать из-за внутренних ограничений;
  • с использованием параметра WITH TABLOCK. В этом случае команда DBCC соблюдает ограничение запроса и не создает моментальный снимок.

Команды DBCC используют блокировки таблиц, а не внутренние моментальные снимки базы данных, если выполняются:

  • в файловой группе, предназначенной только для чтения;
  • в файловой системе FAT;
  • в томе, который не поддерживает «именованные потоки»;
  • в томе, который не поддерживает «альтернативные потоки».
ms188796.note(ru-ru,SQL.90).gifПримечание.
Для запуска команды DBCC CHECKALLOC или эквивалентной части DBCC CHECKDB с параметром WITH TABLOCK требуется X-блокировка базы данных. Такую блокировку нельзя устанавливать в базе данных tempdb и master: это может привести к ошибкам во всех остальных базах данных.
ms188796.note(ru-ru,SQL.90).gifПримечание.
Команда DBCC CHECKDB вызывает ошибку при выполнении в базе данных master, если невозможно создать внутренний моментальный снимок базы данных.

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

В SQL Server 2005 в представлении каталога sys.dm_exec_requests содержатся сведения о ходе выполнения и текущем этапе выполнения команд DBCC CHECKDB, CHECKFILEGROUP и CHECKTABLE. В столбце percent_complete указывается процент выполнения команды, а в столбце command отображается текущий этап ее выполнения.

Определение единицы хода выполнения зависит от текущего этапа выполнения команды DBCC. Иногда отчет о состоянии формируется на уровне гранулярности страницы базы данных, на других этапах — на уровне гранулярности одной базы данных или исправления распределения пространства. В следующей таблице представлены все этапы выполнения и уровень гранулярности, на котором команда формирует отчет о состоянии.

Этап выполнения

Описание

Уровень гранулярности отчетов о состоянии

DBCC TABLE CHECK

Во время этого этапа проверяется логическая и физическая согласованность объектов в базе данных.

Отчет о состоянии сформирован на уровне страниц базы данных.

Значение отчета о состоянии обновляется через каждую 1 000 проверенных страниц базы данных.

DBCC TABLE REPAIR

Во время этого этапа выполняются исправления базы данных, если указывается параметр REPAIR_FAST, REPAIR_REBUILD или REPAIR_ALLOW_DATA_LOSS и имеются ошибки на уровне объектов.

Отчет о состоянии сформирован на уровне отдельных исправлений.

Счетчик обновляется для каждой завершенной операции исправления.

DBCC ALLOC CHECK

Во время этого этапа проверяются структуры распределения.

ms188796.note(ru-ru,SQL.90).gifПримечание.

Те же проверки выполняет команда DBCC CHECKALLOC.

О состоянии не сообщается

DBCC ALLOC REPAIR

Во время этого этапа выполняются исправления базы данных, если указывается параметр REPAIR_FAST, REPAIR_REBUILD или REPAIR_ALLOW_DATA_LOSS и имеются ошибки на уровне распределения пространства.

О состоянии не сообщается.

DBCC SYS CHECK

Во время этого этапа проверяются системные таблицы базы данных.

Отчет о состоянии сформирован на уровне страниц базы данных.

Значение отчета о состоянии обновляется через каждую 1 000 проверенных страниц базы данных.

DBCC SYS REPAIR

Во время этого этапа выполняются исправления базы данных, если указывается параметр REPAIR_FAST, REPAIR_REBUILD или REPAIR_ALLOW_DATA_LOSS и имеются ошибки на уровне системных таблиц.

Отчет о состоянии сформирован на уровне отдельных исправлений.

Счетчик обновляется для каждой завершенной операции исправления.

DBCC SSB CHECK

Во время этого этапа проверяются объекты компонента SQL Server Service Broker.

ms188796.note(ru-ru,SQL.90).gifПримечание.

Эта фаза не выполняется при выполнении инструкции DBCC CHECKTABLE.

О состоянии не сообщается.

DBCC CHECKCATALOG

Во время этого этапа проверяется согласованность каталогов базы данных.

ms188796.note(ru-ru,SQL.90).gifПримечание.

Эта фаза не выполняется при выполнении инструкции DBCC CHECKTABLE.

О состоянии не сообщается.

DBCC IVIEW CHECK

Во время этого этапа проверяется логическая согласованность всех индексированных представлений базы данных.

Отчет о состоянии сформирован на уровне отдельных представлений баз данных.

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

DBCC CONCURRENCYVIOLATION

DBCC SHOW_STATISTICS

DBCC INPUTBUFFER

DBCC SHOWCONTIG

DBCC OPENTRAN

DBCC SQLPERF

DBCC OUTPUTBUFFER

DBCC TRACESTATUS

DBCC PROCCACHE

DBCC USEROPTIONS

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

DBCC CHECKALLOC

DBCC CHECKFILEGROUP

DBCC CHECKCATALOG

DBCC CHECKIDENT

DBCC CHECKCONSTRAINTS

DBCC CHECKTABLE

DBCC CHECKDB

 

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

DBCC CLEANTABLE

DBCC INDEXDEFRAG

DBCC DBREINDEX

DBCC SHRINKDATABASE

DBCC DROPCLEANBUFFERS

DBCC SHRINKFILE

DBCC FREEPROCCACHE

DBCC UPDATEUSAGE

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

DBCC dllname (FREE)

DBCC TRACEOFF

DBCC HELP

DBCC TRACEON