На главную страницу

Выйди из "пробки" в SQL Server при помощи DBCC

Arthur Fuller (оригинал: Get out of a jam by using SQL Server's DBCC)
Перевод Моисеенко С.И.

В моменты бедствия проверка согласованности базы данных (DBCC), может оказаться вашим самый ценным другом. Здесь приводится краткий обзор того, что DBCC может сделать для Вас, в частности:

· Проверить целостность ваших таблиц и связанных с ними индексов.

· Проверить всю базу данных.

· Проверить целостность страниц базы данных.

· Восстановить индексы на заданной таблице.

Почему Вы должны дружить с DBCC

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

· Страницы базы данных (и таблиц и индексов) необходимо периодически разбиваются на несколько, что может привести к их плохому распределению.

· Индексы могут испортиться или просто стать неэффективными.

· Движок Сервера SQL может иногда неправильно понять ваши намерения.

· В ситуациях, когда нормой является большое число обновлений, можно обрасти (помните, что каждое обновление - это фактически удаление и вставка).

· Отдельные страницы, хотя все еще "звучат", могут потерять свое оптимальное место хранения.

Как использовать DBCC

Вы можете запустить DBCC двумя способами: от командной строки и из окна Query Analyzer. Вы можете выполнять эти операции по расписанию, если считаете это необходимым. (Я никогда не чувствовал в этом потребности, поскольку из всех продуктов Microsoft я более всего уверен в стабильности SQL Server. Я полагаю, что это самый замечательный продукт, который когда-либо появлялся из Редмонда. Но не всегда все идет так, как надо.)

Команда DBCC имеет следующие расширения:

· CheckDB: проверяет согласованность всей базы данных, и является основным методом для проверки поврежденности базы данных.

· CheckTable: проверяет заданную таблицу на наличие проблем.

· CheckAlloc: проверяет отдельные страницы данных в базе, занятые как таблицами, так и индексами.

· Reindex: восстанавливает индексы на указанной таблице.

· CacheStats: сообщает об объектах, в настоящее время находящихся в кэше памяти.

· DropCleanBuffers: Удаляет все данные, находящиеся в настоящее время в буфере, для того, чтобы Вы могли продолжить тестирование, не используя предыдущие результаты.

· Errorlog: стирает (усекает) текущий журнал. Вы могли бы задать расписание для выполнения джоба, содержащего эту команду, чтобы выполнять ее, например, один раз в неделю.

· FlushProcInDB: Очищает процедурный кэш для заданной базы данных (используйте ее dbid, а не имя). Вот так можно определить используемое id:

SELECT dbid FROM master.dbo.sysdatabases
WHERE name = '<имя БД>'

· IndexDefrag: уменьшает фрагментацию в индексах, не накладывая блокировок на файлы, так что пользователи могут продолжать работу с базой данных.

· CheckCatalog: проверяет указанную базу данных на согласованность в таблицах и между ними (последнее означает внешние ключи и т.д.).

Как использовать пять из этих расширений

DBCC сначала создает снимок вашей базы данных (за исключением определенных специфических обстоятельств, например, работы с Master, TempDB или базой данных только для чтения). Условие: Чтобы использовать DBCC, ваша база данных должна находиться в однопользовательском режиме.

Использование DBCC CheckDB

Эта команда гарантирует, что: · Страницы данных и индексов правильно связаны.
· Индексы отсортированы правильно и актуальны.
· Указатели согласованы.
· Данные на каждой странице актуальны.
· Смещения страниц актуальны.

Ниже три самых общих способа использоватния CheckDB:

DBCC CHECKDB ('AdventureWorks', REPAIR_FAST)

DBCC CHECKDB ('AdventureWorks', REPAIR_REBUILD)

DBCC CHECKDB ('AdventureWorks', REPAIR_ALLOW_DATA_LOSS)

Использование DBCC CheckTable

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

DBCC CheckTable ('Sales,SalesOrderHeader')

DBCC CheckTable ('Sales,SalesOrderHeader', REPAIR_REBUILD)

Использование DBCC CheckAlloc

Эта команда проверяет согласованность страниц данных и их индексов. Ниже два примера:

DBCC CHECKALLOC ('Sales.SalesOrderDetails')

DBCC CHECKALLOC ('Sales.SalesOrderDetails', REPAIR_REBUILD)

Использование DBCC CheckCatalog

Используйте эту команду для проверки согласованности системных таблиц базы данных. Вы задаете имя базы данных, которую требуется проверить и необязательный аргумент WITH NO_INFOMSGS. Например:

DBCC CHECKCATALOG ('AdventureWorks')

Использование DBCC ReIndex

Эта команда вызывает перестройку одного или более индексов на заданной таблице или представлении. Вы можете также задать имя конкретного индекса, а также коэффициент заполнения (fill factor). Ниже два примера.

DBCC REINDEX ('AdventureWorks.Sales.SalesOrderHeader', PK_SalesOrderHeader_SalesOrderID'

DBCC REINDEX ('AdventureWorks.Sales.SalesOrderHeader', PK_SalesOrderHeader_SalesOrderID', 90)

Третий аргумент указывает, что я хочу получить коэффициент заполнения 90 % на перестроенном индексе.

Дополнительная информация Теперь, когда Вы знаете самые общие примеры использования DBCC, обратитесь к Books Online за информацией о дополнительных аргументах и опциях для каждого варианта команды.

На главную страницу