На главную страницу
Выйди из "пробки" в 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 за информацией о дополнительных аргументах и опциях для каждого варианта
команды.
На главную страницу