DBCC CHECKFILEGROUP (Transact-SQL)

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

Значок ссылки на разделСоглашения о синтаксическом обозначении в Transact-SQL

Синтаксис

DBCC CHECKFILEGROUP 
[
    [ ( { filegroup_name | filegroup_id | 0 } 
        [ , NOINDEX ] 
  ) ]
    [ WITH 
        { 
            [ ALL_ERRORMSGS | NO_INFOMSGS ] 
            [ , TABLOCK ] 
            [ , ESTIMATEONLY ]
            [ , PHYSICAL_ONLY ]  
        } 
    ]
]

Аргументы

  • filegroup_name
    Имя файловой группы текущей базы данных, для которой производится проверка распределения и структурной целостности таблиц. Если не указано или равно 0, по умолчанию используется первичная файловая группа. Имена файловых групп должны соответствовать правилам для идентификаторов.

    Аргумент filegroup_name не может указывать на файловую группу FILESTREAM.

  • filegroup_id
    Идентификатор файловой группы текущей базы данных, для которой производится проверка распределения и структурной целостности.

  • NOINDEX
    Указывает, что тщательную проверку некластеризованных индексов для пользовательских таблиц выполнять не следует. Это уменьшает общее время выполнения. Аргумент NOINDEX не оказывает влияния на системные таблицы, так как инструкция DBCC CHECKFILEGROUP всегда проверяет все индексы системных таблиц.

  • ALL_ERRORMSGS
    Отображает неограниченное число ошибок на каждый объект. Все сообщения об ошибках выводятся по умолчанию. Указание или пропуск этого параметра не приводит к изменениям.

  • NO_INFOMSGS
    Подавляет вывод всех информационных сообщений.

  • TABLOCK
    Заставляет инструкцию DBCC CHECKFILEGROUP устанавливать блокировку вместо использования внутреннего моментального снимка базы данных.

  • ESTIMATEONLY
    Отображает оценочный объем места в базе данных tempdb, необходимый для запуска инструкции DBCC CHECKFILEGROUP со всеми остальными заданными параметрами.

  • PHYSICAL_ONLY
    Ограничивает область проверки целостностью физической структуры страниц, заголовков записей и физической структуры сбалансированных деревьев. Параметр предназначен для выполнения облегченной проверки физической согласованности файловой группы, а также может выявлять поврежденные страницы и общие сбои оборудования, которые могут нарушить целостность данных. Полное выполнение инструкции DBCC CHECKFILEGROUP может занять значительно больше времени, чем в предыдущих версиях. Это вызвано следующими причинами.

    • Логические проверки стали более сложными.

    • Усложнился ряд базовых структур, нуждающихся в проверке.

    • Добавлено много новых проверок для поддержки новых функций.

    Таким образом, применение параметра PHYSICAL_ONLY может значительно сократить время выполнения инструкции DBCC CHECKFILEGROUP для больших файловых групп, поэтому рекомендуется использовать его для частых проверок в рабочих системах. Также рекомендуется периодически производить полный запуск инструкции DBCC CHECKFILEGROUP. Периодичность запуска зависит от факторов, индивидуальных для каждого предприятия и каждой производственной среды. Аргумент PHYSICAL_ONLY всегда неявно включает аргумент NO_INFOMSGS и не должен указываться вместе с параметрами исправления ошибок.

    ПримечаниеПримечание

    Указание аргумента PHYSICAL_ONLY приводит к пропуску инструкцией DBCC CHECKFILEGROUP всех проверок данных FILESTREAM.

Замечания

Команды DBCC CHECKFILEGROUP и DBCC CHECKDB похожи. Основное отличие состоит в том, что инструкция DBCC CHECKFILEGROUP ограничена отдельной конкретной файловой группой и обязательными таблицами.

Инструкция DBCC CHECKFILEGROUP выполняет следующие команды.

  • Инструкцию DBCC CHECKALLOC для файловой группы.

  • Инструкцию DBCC CHECKTABLE для каждой таблицы и каждого индексированного представления в указанной файловой группе.

Запуск инструкций DBCC CHECKALLOC или DBCC CHECKTABLE отдельно от DBCC CHECKFILEGROUP не требуется.

Внутренний моментальный снимок базы данных

В инструкции DBCC CHECKFILEGROUP используется внутренний моментальный снимок базы данных для обеспечения согласованности транзакций, необходимой для выполнения таких проверок. Дополнительные сведения об этом см. в разделах Основные сведения о размере разреженных файлов в моментальных снимках базы данных и «Использование внутреннего моментального снимка базы данных DBCC» в DBCC (Transact-SQL).

Если моментальный снимок создать невозможно или указан параметр TABLOCK, инструкция DBCC CHECKFILEGROUP устанавливает блокировки для получения необходимой согласованности. В таком случае для проверки выделенных ресурсов необходима монопольная блокировка базы данных, а для проверки таблиц — разделяемая блокировка таблицы. Аргумент TABLOCK позволяет быстрее выполнять инструкцию DBCC CHECKFILEGROUP в базе данных с большой загрузкой, но уменьшает уровень доступного параллелизма для базы данных во время запуска инструкции DBCC CHECKFILEGROUP.

ПримечаниеПримечание

При выполнении инструкции DBCC CHECKFILEGROUP в базе данных tempdb не выполняется никакой проверки выделенных ресурсов, а для выполнения проверки таблиц необходимо получить совмещаемую блокировку таблицы. Это обусловлено тем, что по соображениям производительности моментальные снимки базы данных недоступны для базы данных tempdb. Это означает, что нельзя достичь требуемой согласованности транзакций.

Проверка объектов в параллельном режиме

По умолчанию инструкция DBCC CHECKFILEGROUP выполняет параллельную проверку объектов. Степень параллелизма определяется автоматически обработчиком запросов. Максимальная степень параллелизма настраивается так же, как и в параллельных запросах. Чтобы ограничить максимальное число процессоров, доступных для проверки DBCC, используется процедура sp_configure. Дополнительные сведения см. в разделе Параметр max degree of parallelism.

Параллельную проверку можно отключить с помощью флага трассировки 2528. Дополнительные сведения см. в разделе Флаги трассировки (Transact-SQL).

Некластеризованные индексы для отдельных файловых групп

Если некластеризованный индекс в указанной файловой группе связан с таблицей в другой файловой группе, индекс не проверяется, так как базовая таблица недоступна для проверки. Это поведение изменено в SQL Server 2005. В предыдущих версиях SQL Server некластеризованный индекс и базовая таблица другой файловой группы подвергались проверке. Чтобы проверить как некластеризованные индексы, так и базовые таблицы, выполните инструкцию DBCC CHECKDB.

Если для таблицы из проверяемой файловой группы имеется некластеризованный индекс в другой файловой группе, этот индекс не проверяется по следующим причинам.

  • Структура базовой таблицы не зависит от структуры некластеризованного индекса. Для проверки базовой таблицы просмотр некластеризованных индексов не требуется.

  • Команда DBCC CHECKFILEGROUP проверяет объекты только в указанной файловой группе.

Кластеризованный индекс и таблица не могут принадлежать к различным файловым группам, поэтому предыдущие соображения применяются только к некластеризованным индексам.

Секционированные таблицы в отдельных файловых группах

В версиях SQL Server 2005 без пакета обновления 2 (SP2) команда DBCC CHECKFILEGROUP проверяет секционированную таблицу только в том случае, если вся таблица расположена в указанной файловой группе. Если таблица расположена в нескольких файловых группах, то она не обрабатывается. В версии с пакетом обновления 2 (SPЗ2) и более поздних, если секционированная таблица расположена в нескольких файловых группах, то команда DBCC CHECKFILEGROUP проверяет наборы строк секции, существующие в указанной файловой группе, и не обрабатывает наборы строк в других файловых группах. Информационное сообщение 2594 указывает непроверенные секции. Некластеризованные индексы, не расположенные в указанной файловой группе, не проверяются.

Основные сведения о сообщениях об ошибках DBCC

После завершения выполнения команды DBCC CHECKFILEGROUP в журнал ошибок SQL Server записывается сообщение. При успешном выполнении команды DBCC сообщается об успешном завершении и количестве времени, затраченном на выполнение команды. Если выполнение команды DBCC прерывается до завершения проверки по причине ошибки, сообщение указывает на прерывание команды и приводит значение состояния и количество времени, затраченного на выполнение команды. В следующей таблице перечислены и описаны значения состояний, которые могут быть включены в сообщение.

Состояние

Описание

0

Возникла ошибка с номером 8930. Это указывает на повреждение метаданных, вызвавшее прекращение выполнения команды DBCC.

1

Возникла ошибка с номером 8967. Внутренняя ошибка DBCC.

2

При аварийном восстановлении базы данных произошла ошибка.

3

Это указывает на повреждение метаданных, вызвавшее прекращение выполнения команды DBCC.

4

Обнаружено нарушение доступа или утверждения.

5

Возникла неизвестная ошибка, которая привела к прекращению выполнения команды DBCC.

Отчет об ошибках

При каждом обнаружении командой DBCC CHECKFILEGROUP ошибки повреждения данных в каталоге «LOG» SQL Server создается файл мини-дампа (SQLDUMPnnnn.txt). Если для экземпляра SQL Server включены функции сбора данных об использовании компонентов и отчетов об ошибках, этот файл автоматически отправляется корпорации Майкрософт. Собранные данные используются для улучшения функциональности SQL Server.

Файл дампа содержит результаты выполнения команды DBCC CHECKFILEGROUP и дополнительные диагностические сведения. Доступ к этому файлу ограничен списками управления доступом на уровне пользователей. Доступ ограничен учетной записью службы SQL Server и членами роли sysadmin. По умолчанию роль sysadmin содержит всех членов группы Windows BUILTIN\Администраторы и группы локальных администраторов. В случае ошибки процесса сбора данных команда DBCC не завершается ошибкой.

Разрешение ошибок

Если инструкцией DBCC CHECKFILEGROUP выдаются какие-либо ошибки, рекомендуется восстановить базу данных из резервной копии. Обратите внимание, что для инструкции DBCC CHECKFILEGROUP параметры восстановления указать нельзя.

В случае отсутствия резервных копий запуск инструкции DBCC CHECKDB с заданным параметром восстановления позволяет исправить выдаваемые ошибки. Если выдаются ошибки, используемый параметр восстановления указывается в конце списка. При исправлении ошибок с помощью аргумента REPAIR_ALLOW_DATA_LOSS может потребоваться удаление некоторых страниц и, следовательно, данных.

Результирующие наборы

Инструкция DBCC CHECKFILEGROUP возвращает следующий результирующий набор (значения могут различаться):

  • кроме случаев, когда заданы параметры ESTIMATEONLY или NO_INFOMSGS;

  • для текущей базы данных, если база данных не указана, независимо от того, заданы ли какие-либо аргументы (кроме NOINDEX).

DBCC results for 'master'.
DBCC results for 'sys.sysrowsetcolumns'.
There are 630 rows in 7 pages for object 'sys.sysrowsetcolumns'.
DBCC results for 'sys.sysrowsets'.
There are 97 rows in 1 pages for object 'sys.sysrowsets'.
DBCC results for 'sysallocunits'.
There are 195 rows in 3 pages for object 'sysallocunits'.

There are 2340 rows in 16 pages for object 'spt_values'.
DBCC results for 'MSreplication_options'.
There are 2 rows in 1 pages for object 'MSreplication_options'.
CHECKFILEGROUP found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Если задан аргумент NO_INFOMSGS, инструкция DBCC CHECKFILEGROUP возвращает:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Если задан аргумент ESTIMATEONLY, инструкция DBCC CHECKFILEGROUP возвращает следующее (значения могут различаться):

Estimated TEMPDB space needed for CHECKALLOC (KB) 
------------------------------------------------- 
15

(1 row(s) affected)

Estimated TEMPDB space needed for CHECKTABLES (KB) 
-------------------------------------------------- 
207

(1 row(s) affected)

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Разрешения

Необходимо быть членом предопределенной роли сервера sysadmin или предопределенной роли базы данных db_owner.

Примеры

А. Проверка файловой группы PRIMARY базы данных

В следующем примере выполняется проверка первичной файловой группы базы данных База данных AdventureWorks2008R2.

USE AdventureWorks2008R2;
GO
DBCC CHECKFILEGROUP;
GO

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

В следующем примере выполняется проверка первичной файловой группы базы данных База данных AdventureWorks2008R2 (за исключением некластеризованных индексов) путем указания идентификационного номера первичной файловой группы, а также параметра NOINDEX.

USE AdventureWorks2008R2;
GO
DBCC CHECKFILEGROUP (1, NOINDEX);
GO

В. Проверка первичной файловой группы с параметрами

В следующем примере выполняется проверка первичной файловой группы базы данных master с указанием параметра ESTIMATEONLY.

USE master;
GO
DBCC CHECKFILEGROUP (1)
WITH ESTIMATEONLY;