Использование команды DBCC СHECKDB для проверки целостности базы данных

22 Сентября 2014
Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения
Само слово «целостность» имеет несколько смыслов в мире SQL. Один из них относится к качеству данных, хранящихся на сервере. В другом смысле, целостность поддерживается через правильный ввод данных, ограничения на вводе, и проверку данных. В третьем смысле, целостность относится к логическому и физическому постоянству структуры базы данных – это гораздо более сложная тема, к которой как раз и относится данная статья.

В SQL-сервере есть команда DBCC, чтобы проверять целостность базы. Существует несколько вариантов этой команды, но сейчас мы поговорим только про DBCC CHECKDB. Эта команда проверяет внутренние структуры, метаданные, и данные в базе.

В своей простейшей форме команда выполняется в следующем формате: DBCC CHECKDB (имя базы данных);

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

  • NO_INFOMSGS: убирает все информационные сообщения
  • ALL_ERRORMSGS: возвращает ВСЕ сообщения об ошибках. В ранних версиях SQL-сервера, сообщения об ошибках ограничивались 200-ми. Если запустить команду через SSMS (SQL Server Management Studio), ограничение будет равно 1000. Эта опция выдает все сообщения.
  • TABLERESULTS: возвращает результаты в удобной таблице, нежели в обычном тексте.

Когда команда обнаруживает проблему, легко запутаться в том, что она выдает. Для начала самое главное – это посмотреть на колонку «Уровень».  Уровень показывает серьезность проблемы, и в первую очередь вам надо смотреть на проблемы с самым высоким уровнем 16.

Вы можете обратиться с запросами к sys.database_files или sys.master_files, чтобы посмотреть, какой файл содержит поврежденную страницу. Посмотрите на идентификаторы в сообщениях об ошибках, чтобы определить, какие объекты и индексы испытывают влияние от ошибки.

И последний совет, игнорируйте столбец RepairLevel, не используйте функции восстановления для CHECKDB, пока абсолютно все другие средства не были использованы и не помогли. Функция восстановления (repair) удалит страницы с данными, содержащими повреждения, и потом их нельзя будет восстановить, кроме как вручную ввести данные. Если вы не являетесь экспертом по работе с повреждениями в базе данных, найдите такого эксперта, перед тем, как пытаться как-то исправить проблему.

 По материалам sqlsoldier.com
Получить консультацию специалиста