DBCC CHECKTABLE (Transact-SQL)

Изменения: 17 ноября 2008 г.

Производит проверку целостности всех страниц и структур, составляющих таблицу или индексированное представление.

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

Синтаксис

DBCC CHECKTABLE 
(
        table_name | view_name
    [ , { NOINDEX | index_id }
     |, { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } 
    ] 
)
    [ WITH 
        { ALL_ERRORMSGS ]
          [ , NO_INFOMSGS ]
          [ , TABLOCK ] 
          [ , ESTIMATEONLY ] 
          [ , { PHYSICAL_ONLY | DATA_PURITY } ] 
        }
    ]

Аргументы

  • table_name | view_name
    Таблица или индексированное представление, для которой необходимо выполнять проверки целостности. Имена таблиц и представлений должны соответствовать правилам построения идентификаторов.
  • NOINDEX
    Указывает, что тщательную проверку некластеризованных индексов для пользовательских таблиц выполнять не следует. Это уменьшает общее время выполнения. Аргумент NOINDEX не оказывает влияния на проверки системных таблиц, поскольку проверки целостности для индексов всех системных таблиц выполняются всегда.
  • index_id
    Идентификационный номер (ID) индекса, для которого выполняются проверки целостности. Если указан аргумент index_id, инструкция DBCC CHECKTABLE выполняет проверки целостности только для этого индекса, включая кучу или кластеризованный индекс.
  • REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
    Указывает, что инструкции DBCC CHECKTABLE следует исправлять обнаруженные ошибки. Для использования параметра исправления база данных должна быть открыта в однопользовательском режиме.

    • REPAIR_ALLOW_DATA_LOSS
      Пытается устранить все обнаруженные ошибки. Эти исправления могут привести к частичной потере данных.
    • REPAIR_FAST
      Синтаксис сохраняется только в целях обратной совместимости. Действия по восстановлению не выполняются.
    • REPAIR_REBUILD
      Выполняет как незначительные, не занимающие много времени процессы восстановления, например восстановление дополнительных ключей в некластеризованных индексах, так и продолжительные процессы восстановления, например перестроение индексов. Этот вид исправления ошибок не приводит к потере данных при выполнении.
    ms174338.note(ru-ru,SQL.90).gifПримечание.
    Используйте аргументы REPAIR только как последнее средство. Для устранения ошибок рекомендуется восстановление из резервной копии. Операции устранения ошибок не учитывают ограничения, которые могут быть наложены на таблицы или между таблицами. Если указанная таблица участвует в одном или нескольких ограничениях, рекомендуется после операции устранения ошибок выполнить инструкцию DBCC CHECKCONSTRAINTS. Если необходимо использовать аргументы REPAIR, выполните инструкцию DBCC CHECKDB без параметра восстановления, чтобы узнать требуемый уровень восстановления. При использовании уровня REPAIR_ALLOW_DATA_LOSS рекомендуется создать резервную копию базы данных перед выполнением инструкции DBCC CHECKDB с данным параметром.
  • ALL_ERRORMSGS
    Отображает неограниченное число ошибок. В SQL Server 2005 с пакетом обновления 3 (SP3) по умолчанию отображаются все сообщения об ошибках. Указание или пропуск этого параметра не имеют значения. В более ранних версиях SQL Server, если аргумент ALL_ERRORMSGS не указан, будут отображаться лишь первые 200 сообщений об ошибках для каждого объекта.
  • NO_INFOMSGS
    Подавляет вывод всех информационных сообщений.
  • TABLOCK
    Указывает инструкции DBCC CHECKTABLE использовать совмещаемую блокировку таблицы вместо создания моментального снимка внутренней базы данных. Аргумент TABLOCK позволяет ускорить работу инструкции DBCC CHECKTABLE в условиях высокой загрузки, но снижает текущую согласованность данных для таблицы во время выполнения этой инструкции.
  • ESTIMATEONLY
    Отображает предполагаемый размер базы данных tempdb, необходимый для запуска инструкции DBCC CHECKTABLE с указанными параметрами.
  • PHYSICAL_ONLY
    Ограничивает область проверки целостностью физической структуры страниц, заголовков записей и физической структуры сбалансированных деревьев. Параметр предназначен для выполнения облегченной проверки физической согласованности таблицы, а также может выявлять поврежденные страницы и общие сбои оборудования, которые могут привести к потере данных. В SQL Server 2005 полный запуск инструкции DBCC CHECKTABLE может занять значительно больше времени, чем в предыдущих версиях. Это вызвано следующими причинами.

    • Логические проверки стали более сложными.
    • Усложнился ряд базовых структур, нуждающихся в проверке.
    • Добавлены многие новые проверки для поддержки новых возможностей SQL Server 2005.

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

  • DATA_PURITY
    Указание значения аргумента приводит к выполнению инструкцией DBCC CHECKTABLE проверки таблицы на недействительность или выход из допустимого диапазона значений столбцов. Например, инструкция DBCC CHECKTABLE будет обнаруживать столбцы со значениями даты и времени, выходящими из допустимого диапазона значений типа данных datetime; столбцы типа decimal или приблизительных числовых типов данных с неверными значениями масштаба или точности.

    Для баз данных, созданных в SQL Server 2005, проверка значений данных в столбцах на целостность включена по умолчанию и не требует указания параметра DATA_PURITY. Для баз данных, обновляемых с предыдущих версий SQL Server, имеется возможность использовать инструкцию DBCC CHECKTABLE WITH DATA_PURITY для нахождения и исправления ошибок для заданной таблицы, однако проверки столбцов-значений таблицы запрещены по умолчанию до тех пор, пока инструкция DBCC CHECKDB WITH DATA_PURITY работает с базой данных без ошибок. После этого инструкции DBCC CHECKDB и DBCC CHECKTABLE проверяют целостность данных в столбцах-значениях по умолчанию.

    Ошибки проверки, передаваемые при наличии этого параметра, не могут быть устранены с помощью параметров восстановления DBCC. Дополнительные сведения об устранении этих ошибок вручную см. в статье 923247 базы знаний Майкрософт Диагностика ошибки 2570 инструкции DBCC в SQL Server 2005.

    Если указан аргумент PHYSICAL_ONLY, проверка целостности значений в столбцах не выполняется.

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

Инструкция DBCC CHECKTABLE возвращает следующий результирующий набор. Тот же результирующий набор возвращается как при указании только имени таблицы, так и при указании любых параметров.

DBCC results for 'HumanResources.Employee'.
There are 288 rows in 13 pages for object 'Employee'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Инструкция DBCC CHECKTABLE возвращает следующий результирующий набор, если указан параметр ESTIMATEONLY:

Estimated TEMPDB space needed for CHECKTABLES (KB) 
-------------------------------------------------- 
21
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Замечания

Инструкция DBCC CHECKTABLE выполняет проверку согласованности отдельной таблицы или индексированного представления и всех его некластеризованных индексов и XML-индексов (если не указан параметр NOINDEX). Чтобы выполнить инструкцию DBCC CHECKTABLE для каждой таблицы в базе данных, используйте инструкцию DBCC CHECKDB.

Для указанной таблицы инструкция DBCC CHECKTABLE выполняет следующие проверки.

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

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

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

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

ms174338.note(ru-ru,SQL.90).gifПримечание.
Если инструкция DBCC CHECKTABLE выполняется для базы данных tempdb, ей необходимо получить совмещаемую блокировку таблицы. Это обусловлено тем, что по соображениям производительности моментальные снимки базы данных недоступны для базы данных tempdb. Это означает, что нельзя достичь требуемой согласованности транзакций.

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

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

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

ms174338.note(ru-ru,SQL.90).gifПримечание.
Во время выполнения операции DBCC CHECKTABLE байты, сохраненные в столбце побайтно упорядоченного определяемого пользователем типа, должны совпасть с вычисленной сериализацией значения пользовательского типа. В противном случае процедура DBCC CHECKTABLE сообщит о несогласованности.

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

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

Штат Описание

0

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

1

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

2

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

3

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

4

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

5

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

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

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

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

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

Если инструкция DBCC CHECKTABLE выдает какие-либо ошибки, рекомендуется восстановить базу данных из резервной копии, а не запускать параметр REPAIR с параметрами исправления ошибок. Если резервная копия отсутствует, исправить выданные ошибки можно запуском параметра REPAIR. В конце списка ошибок указано, какой из параметров REPAIR следует использовать. Однако исправление ошибок с параметром REPAIR_ALLOW_DATA_LOSS может потребовать удаления некоторых страниц, которые могут содержать данные.

Исправление ошибок может быть выполнено в пользовательской транзакции, позволяя откатить произведенные изменения. После отката исправлений база данных по-прежнему будет содержать ошибки, и ее необходимо будет восстановить из резервной копии. После завершения исправления всех ошибок создайте резервную копию базы данных.

Разрешения

Пользователь должен быть либо владельцем таблицы, либо членом фиксированной серверной роли sysadmin, фиксированной роли базы данных db_owner или фиксированной роли базы данных db_ddladmin.

Примеры

А. Проверка указанной таблицы

В следующем примере производится проверка целостности страниц данных таблицы HumanResources.Employee в базе данных AdventureWorks .

USE AdventureWorks;
GO
DBCC CHECKTABLE ("HumanResources.Employee");
GO

Б. Выполнение облегченной проверки таблицы

В следующем примере производится облегченная проверка таблицы Employee в базе данных AdventureWorks.

USE AdventureWorks;
GO
DBCC CHECKTABLE ("HumanResources.Employee") WITH PHYSICAL_ONLY;
GO

В. Проверка указанного индекса

В следующем примере производится проверка указанного индекса, полученного из sys.indexes.

USE AdventureWorks;
GO
DECLARE @indid int;
SET @indid = (SELECT index_id 
              FROM sys.indexes
              WHERE object_id = OBJECT_ID('Production.Product')
                    AND name = 'AK_Product_Name');
DBCC CHECKTABLE ("Production.Product", @indid);

См. также

Справочник

DBCC (Transact-SQL)

Другие ресурсы

Архитектура таблиц и индексов
Диагностика ошибок DBCC на индексированных представлениях

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

17 ноября 2008 г.

Добавления
  • В определении ALL_ERRORMSGS описаны новые функции в пакете обновления 3 (SP3).

12 декабря 2006 г.

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

14 апреля 2006 г.

Добавления
  • В раздел «Примечания» добавлен подраздел «Отчет об ошибках». В этом разделе описаны новые функциональные возможности пакета обновления 1 (SP1).

5 декабря 2005 г.

Добавления
  • Добавлено примечание об определяемом пользователем типе.
Изменения
  • Исправлено определение аргумента REPAIR_FAST. Этот параметр не выполняет действий по восстановлению.
  • Исправлен синтаксис.
  • Исправлен пример В.