DBCC CHECKTABLE (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Производит проверку целостности всех страниц и структур, составляющих таблицу или индексированное представление.
Соглашения о синтаксисе Transact-SQL
Синтаксис
DBCC CHECKTABLE
(
table_name | view_name
[ , { NOINDEX | index_id }
| , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD }
]
)
[ WITH
{ [ ALL_ERRORMSGS ]
[ , EXTENDED_LOGICAL_CHECKS ]
[ , NO_INFOMSGS ]
[ , TABLOCK ]
[ , ESTIMATEONLY ]
[ , { PHYSICAL_ONLY | DATA_PURITY } ]
[ , MAXDOP = number_of_processors ]
}
]
Аргументы
table_name | view_name
Таблица или индексированное представление, для которого выполняются проверки целостности. Имена таблиц и представлений должны соответствовать правилам построения идентификаторов.
NOINDEX
Указывает, что не следует выполнять интенсивные проверки некластеризованных индексов для пользовательских таблиц. Это уменьшает общее время выполнения. NOINDEX
Не влияет на системные таблицы, так как проверки целостности всегда выполняются во всех системных индексах таблиц.
index_id
Номер идентификатора индекса, для которого выполняются проверки целостности. Если указан index_id , DBCC CHECKTABLE
выполняет проверку целостности только на этом индексе вместе с кучей или кластеризованным индексом.
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
Указывает, что DBCC CHECKTABLE
исправите найденные ошибки. Для использования параметра исправления база данных должна быть открыта в однопользовательском режиме.
REPAIR_ALLOW_DATA_LOSS
Пытается устранить все обнаруженные ошибки. Эти исправления могут привести к частичной потере данных.
REPAIR_FAST
Синтаксис сохраняется только в целях обратной совместимости. Действия по восстановлению не выполняются.
REPAIR_REBUILD
Выполняет действия по восстановлению данных, которые можно выполнить без риска их потери. Это может быть быстрое восстановление (например, восстановление отсутствующих строк в некластеризованных индексах) или более ресурсоемкие операции (например, перестроение индекса).
Этот аргумент не исправляет ошибки, связанные с данными FILESTREAM.
Внимание
Используйте аргументы REPAIR только как последнее средство. Для устранения ошибок рекомендуется восстановление из резервной копии. Операции восстановления не учитывают какие-либо ограничения, которые могут существовать в таблицах или между ними. Если указанная таблица включена в одно или несколько ограничений, рекомендуется выполнить инструкцию DBCC CHECKCONSTRAINTS
после операции восстановления. Если необходимо использовать аргумент REPAIR, выполните инструкцию DBCC CHECKTABLE
без параметра восстановления, чтобы узнать требуемый уровень восстановления. Если вы используете REPAIR_ALLOW_DATA_LOSS
уровень, рекомендуется создать резервную копию базы данных перед выполнением DBCC CHECKTABLE
этого параметра.
ALL_ERRORMSGS
Отображает неограниченное число ошибок. Все сообщения об ошибках выводятся по умолчанию. Указание или пропуск этого параметра не приводит к изменениям.
EXTENDED_LOGICAL_CHECKS
Если уровень совместимости равен 100, представлен в SQL Server 2008 (10.0.x), выполняет логические проверки согласованности для индексированного представления, XML-индексов и пространственных индексов, где присутствует.
Дополнительные сведения см. в разделе "Выполнение логических проверок согласованности по индексам" в разделе "Примечания" далее в этой статье.
NO_INFOMSGS
Подавляет вывод всех информационных сообщений.
TABLOCK
DBCC CHECKTABLE
Причины получения общей блокировки таблицы вместо использования внутреннего моментального снимка базы данных. TABLOCK
приведет DBCC CHECKTABLE
к более быстрому выполнению таблицы под тяжелой нагрузкой, но уменьшает параллелизм, доступный в таблице во время DBCC CHECKTABLE
выполнения.
ESTIMATEONLY
Отображает предполагаемое количество места, необходимого tempdb
для выполнения DBCC CHECKTABLE
со всеми другими указанными параметрами.
PHYSICAL_ONLY
Ограничивает область проверки целостностью физической структуры страниц, заголовков записей и физической структуры сбалансированных деревьев. Параметр предназначен для выполнения облегченной проверки физической согласованности таблицы, а также может выявлять поврежденные страницы и общие сбои оборудования, которые могут привести к потере данных. Полный запуск DBCC CHECKTABLE
может занять значительно больше времени, чем в более ранних версиях. Это вызвано следующими причинами.
- Логические проверки стали более сложными.
- Усложнился ряд базовых структур, нуждающихся в проверке.
- Добавлено много новых проверок для поддержки новых функций.
Примечание.
В документации термин B-tree обычно используется в ссылке на индексы. В индексах rowstore ядро СУБД реализует дерево B+. Это не относится к индексам columnstore или индексам в таблицах, оптимизированных для памяти. Дополнительные сведения см. в руководстве по архитектуре и проектированию индексов SQL Sql Server и Azure.
Поэтому использование PHYSICAL_ONLY
параметра может привести к гораздо более короткому времени выполнения для DBCC CHECKTABLE
больших таблиц и поэтому рекомендуется для частого использования в рабочих системах. Мы по-прежнему рекомендуем периодически выполнять полный DBCC CHECKTABLE
запуск. Периодичность запуска зависит от факторов, индивидуальных для каждого предприятия и каждой производственной среды. PHYSICAL_ONLY
всегда подразумевает NO_INFOMSGS и не допускается с одним из вариантов восстановления.
Примечание.
Указание PHYSICAL_ONLY
причин DBCC CHECKTABLE
пропуска всех проверок данных FILESTREAM.
DATA_PURITY
Причины DBCC CHECKTABLE
проверки таблицы для значений столбцов, которые не являются допустимыми или не допустимыми. Например, DBCC CHECKTABLE
обнаруживает столбцы со значениями даты и времени, которые больше или меньше допустимого диапазона для типа данных datetime ; или столбцы типа данных десятичного или приблизительного числа с недопустимыми значениями масштабирования или точности.
Проверки целостности столбцов включены по умолчанию и не требуют этого DATA_PURITY
параметра. Для баз данных, обновленных с более ранних версий SQL Server, можно DBCC CHECKTABLE WITH DATA_PURITY
найти и исправить ошибки в определенной таблице. Однако проверки значений столбцов в таблице по умолчанию не включены до тех пор, пока DBCC CHECKDB WITH DATA_PURITY
не будет запущена ошибка в базе данных. После этого DBCC CHECKDB
и DBCC CHECKTABLE
проверьте целостность значения столбца по умолчанию.
Ошибки проверки, сообщаемые этим параметром, не могут быть исправлены с помощью параметров восстановления DBCC. Дополнительные сведения об устранении этих ошибок вручную см. в статье 923247 базы знаний Майкрософт: Устранение ошибки DBCC 2570 в SQL Server 2005 и более поздних версиях.
Если PHYSICAL_ONLY
задано, проверки целостности столбцов не выполняются.
MAXDOP
Область применения: SQL Server 2014 (12.x) с пакетом обновления 2 и более поздних версий.
Переопределяет параметр sp_configure
конфигурации максимальной степени параллелизма для инструкции. MaxDOP может превышать значение, настроенное с sp_configure
помощью . Если MAXDOP превышает значение, настроенное с помощью Resource Governor, ядро СУБД использует значение MAXDOP из Resource Governor, как описано в разделе ALTER WORKLOAD GROUP (Transact-SQL). Все семантические правила, используемые параметром конфигурации max degree of parallelism, применимы при использовании указания запроса MAXDOP. Дополнительные сведения см. в разделе Настройка параметра конфигурации сервера max degree of parallelism.
Примечание.
Если значение MAXDOP равно нулю, то сервер выбирает максимальную степень параллелизма.
Замечания
Примечание.
Чтобы выполнить DBCC CHECKTABLE
каждую таблицу в базе данных, используйте DBCC CHECKDB.
В указанной таблице DBCC CHECKTABLE
проверяется следующее:
- Верны ли ссылки на страницы данных индекса, на страницы данных в строке, на превышающие размер страницы данные строки и на страницы больших объектов.
- Верен ли порядок сортировки индексов.
- Согласованы ли указатели.
- Обоснованы ли данные, содержащиеся на каждой из страниц, в том числе вычисляемые столбцы.
- Обоснованы ли смещения страниц.
- Все ли строки в базовой таблице имеют совпадающие строки в некластеризованных индексах, и наоборот.
- Все ли строки в секционированной таблице или индексе находятся в соответствующих секциях.
- Согласованность между файловой системой и таблицей на уровне ссылок при хранении данных varbinary(max) в файловой системе с помощью FILESTREAM.
Выполнение проверок логической согласованности индексов
Процедура проверки логической целостности индексов зависит от уровня совместимости базы данных следующим образом.
Если уровень совместимости равен 100 (SQL Server 2008 (10.0.x)) или выше:
Если не
NOINDEX
указано, выполняет как физические,DBCC CHECKTABLE
так и логические проверки согласованности для одной таблицы и всех некластеризованных индексов. Однако в XML-индексах, пространственных индексах и индексированных представлениях по умолчанию выполняются только проверки физической целостности.Если указан параметр
WITH EXTENDED_LOGICAL_CHECKS
, выполняются проверки логической согласованности в индексированном представлении, XML-индексах и пространственных индексах (при их наличии). По умолчанию проверки физической согласованности выполняются раньше, чем проверки логической согласованности. Если также указан параметрNOINDEX
, выполняются только проверки логической согласованности.Они проверяют согласованность внутренней таблицы индексов или объекта индекса с пользовательской таблицей, на которую он указывает. Для поиска выбросов создается внутренний запрос, выполняющий полную проверку пересечения внутренних и пользовательских таблиц. Выполнение этого запроса может иметь очень высокий эффект на производительность, и его ход выполнения не может быть отслеживаем. Поэтому рекомендуется указывать параметр
WITH EXTENDED_LOGICAL_CHECKS
только в тех случаях, когда возможно возникновение проблем с индексированием, не связанных с физическими повреждениями, или при неверных контрольных суммах на уровне страниц, либо же при подозрении на повреждение оборудования на уровне столбцов.Если индекс является отфильтрованным индексом, выполняет проверки согласованности, чтобы убедиться,
DBCC CHECKTABLE
что записи индекса удовлетворяют предикату фильтра.
Начиная с SQL Server 2016 (13.x), дополнительные проверки на сохраненные вычисляемые столбцы, столбцы UDT и отфильтрованные индексы по умолчанию не выполняются, чтобы избежать дорогостоящих вычислений выражений. Это изменение значительно сокращает продолжительность
CHECKTABLE
баз данных, содержащих эти объекты. Однако проверки физической согласованности этих объектов всегда выполняются.EXTENDED_LOGICAL_CHECKS
В дополнение к уже имеющимся логическим проверкам (индексированные представления, XML-индексы и пространственные индексы)EXTENDED_LOGICAL_CHECKS
выполняются только при указании параметра вычислений выражений.Если уровень совместимости равен 90 (SQL Server 2005 (9.x)) или меньше, если
NOINDEX
он не указан, выполняет как физические,DBCC CHECKTABLE
так и логические проверки согласованности для одной таблицы или индексированного представления, а также для всех некластеризованных и XML-индексов. Пространственные индексы не поддерживаются.
Определение уровня совместимости базы данных
Внутренний моментальный снимок базы данных
DBCC CHECKTABLE
использует внутренний моментальный снимок базы данных для обеспечения согласованности транзакций, который должен выполнять эти проверки. Дополнительные сведения см. в разделе "Размер разреженного файла моментального снимка базы данных" (Transact-SQL) и раздела об использовании внутреннего моментального снимка базы данных DBCC (Transact-SQL).
Если моментальный снимок не может быть создан или TABLOCK
указан, DBCC CHECKTABLE
получает блокировку общей таблицы для получения требуемой согласованности.
Примечание.
Если DBCC CHECKTABLE
выполняется против tempdb
, он должен получить общую блокировку таблицы. Это связано с тем, что по соображениям производительности моментальные снимки базы данных недоступны tempdb
. Это означает, что нельзя достичь требуемой согласованности транзакций.
Проверка и восстановление данных FILESTREAM
Если для базы данных и таблицы включен режим FILESTREAM, то существует возможность хранения больших двоичных объектов (BLOB) типа varbinary(max) в файловой системе. При использовании в таблице, в которой хранятся DBCC CHECKTABLE
BLOB-объекты в файловой системе, DBCC проверяет согласованность на уровне ссылок между файловой системой и базой данных.
Например, если таблица содержит столбец varbinary(max), использующий атрибут FILESTREAM, убедитесь, DBCC CHECKTABLE
что между каталогами файловой системы и файлами и строками таблиц, столбцами и значениями столбцов существует одно-одно сопоставление. DBCC CHECKTABLE
Может исправить повреждение, если указать REPAIR_ALLOW_DATA_LOSS
этот параметр. Чтобы восстановить повреждение FILESTREAM, DBCC удаляет все строки таблицы, отсутствующие данные файловой системы, и будут удалять все каталоги и файлы, которые не сопоставляются со строкой таблицы, столбцом или значением столбца.
Параллельное проверка объектов
По умолчанию DBCC CHECKTABLE
выполняется параллельная проверка объектов. Степень параллелизма определяется автоматически обработчиком запросов. Максимальная степень параллелизма настраивается точно так же, как и для параллельных запросов. Чтобы ограничить максимальное число процессоров, доступных для проверки DBCC, используйте процедуру sp_configure. Дополнительные сведения см. в разделе Настройка параметра конфигурации сервера max degree of parallelism.
Параллельная проверка может быть отключена с помощью флага трассировки 2528. Дополнительные сведения см. в разделе Флаги трассировки (Transact-SQL).
Примечание.
DBCC CHECKTABLE
Во время операции байты, хранящиеся в столбце определяемого пользователем типа байтов, должны быть равны вычисляемой сериализации определяемого пользователем значения типа. Если это не так, подпрограмма DBCC CHECKTABLE
сообщит об ошибке согласованности.
Примечание.
Эта функция недоступна в каждом выпуске SQL Server. Дополнительные сведения см. в разделе проверки согласованности параллельной согласованности в разделе управляемости RDBMS в выпусках и поддерживаемых функциях SQL Server 2022.
Общие сведения об ошибках DBCC
DBCC CHECKTABLE
После завершения команды сообщение записывается в журнал ошибок SQL Server. При успешном выполнении команды DBCC сообщается об успешном завершении и количестве времени, затраченном на выполнение команды. Если выполнение команды DBCC прерывается до завершения проверки по причине ошибки, сообщение указывает на прерывание команды и приводит значение состояния и количество времени, затраченного на выполнение команды. В следующей таблице перечислены и описаны значения состояний, которые могут быть включены в сообщение.
State | Описание: |
---|---|
0 | Возникла ошибка с номером 8930. Это указывает на повреждение метаданных, вызвавшее прекращение выполнения команды DBCC. |
1 | Возникла ошибка с номером 8967. Внутренняя ошибка DBCC. |
2 | При аварийном восстановлении базы данных произошла ошибка. |
3 | Это указывает на повреждение метаданных, вызвавшее прекращение выполнения команды DBCC. |
4 | Обнаружено нарушение доступа или утверждения. |
5 | Возникла неизвестная ошибка, которая привела к прекращению выполнения команды DBCC. |
Отчеты об ошибках
Файл мини-дампа (SQLDUMP<nnnn>.txt
) создается в каталоге SQL Server LOG
при обнаружении DBCC CHECKTABLE
ошибки повреждения. Если для экземпляра SQL Server включены сбор данных об использовании компонентов и функции отчетов об ошибках, файл автоматически перенаправляются в корпорацию Майкрософт. Собранные данные используются для улучшения функциональности SQL Server.
Файл дампа содержит результаты DBCC CHECKTABLE
команды и дополнительные диагностические выходные данные. Доступ к этому файлу ограничен списками управления доступом на уровне пользователей. Доступ ограничен учетной записью службы SQL Server и членами роли sysadmin. По умолчанию роль sysadmin содержит всех членов группы Windows BUILTIN\Administrators и группы локальных администраторов. Команда DBCC не завершается ошибкой, если процесс сбора данных завершается сбоем.
Устранение ошибок
Если DBCC CHECKTABLE
сообщает об ошибках, рекомендуется восстановить базу данных из резервной копии базы данных вместо запуска REPAIR с одним из вариантов ВОССТАНОВЛЕНИЯ. Если резервная копия отсутствует, исправить выданные ошибки можно запуском параметра REPAIR. В конце списка ошибок указано, какой из параметров REPAIR следует использовать. Тем не менее, что исправление ошибок с помощью REPAIR_ALLOW_DATA_LOSS
параметра может потребовать удаления некоторых страниц и, следовательно, данных.
Исправление ошибок может быть выполнено в пользовательской транзакции, позволяя откатить произведенные изменения. Если восстановление откатывается, база данных по-прежнему будет содержать ошибки и должна быть восстановлена из резервной копии. После завершения исправления всех ошибок создайте резервную копию базы данных.
Результирующие наборы
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.
Разрешения
Пользователь должен быть либо владельцем таблицы, либо членом предопределенной роли сервера sysadmin, предопределенной роли базы данных db_owner или предопределенной роли базы данных db_ddladmin.
Примеры
А. Проверка определенной таблицы
В следующем примере проверяется HumanResources.Employee
целостность страницы данных таблицы в базе данных AdventureWorks2022.
DBCC CHECKTABLE ('HumanResources.Employee');
GO
B. Проверка низкой нагрузки таблицы
В следующем примере выполняется низкая нагрузка на Employee
таблицу в базе данных AdventureWorks2022.
DBCC CHECKTABLE ('HumanResources.Employee') WITH PHYSICAL_ONLY;
GO
В. Проверка определенного индекса
В следующем примере производится проверка указанного индекса, полученного из sys.indexes
.
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);