В моменты бедствия проверка согласованности базы данных (DBCC), может оказаться вашим самый ценным другом. Здесь приводится краткий обзор того, что DBCC может сделать для Вас, в частности:
· Проверить целостность ваших таблиц и связанных с ними индексов.
· Проверить всю базу данных.
· Проверить целостность страниц базы данных.
· Восстановить индексы на заданной таблице.
Если Вы задаетесь вопросом, почему использование DBCC является даже необходимым, то вот причины:
· Страницы базы данных (и таблиц и индексов) необходимо периодически разбиваются на несколько, что может привести к их плохому распределению.
· Индексы могут испортиться или просто стать неэффективными.
· Движок Сервера SQL может иногда неправильно понять ваши намерения.
· В ситуациях, когда нормой является большое число обновлений, можно обрасти (помните, что каждое обновление - это фактически удаление и вставка).
· Отдельные страницы, хотя все еще "звучат", могут потерять свое оптимальное место хранения.
Вы можете запустить 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, ваша база данных должна находиться в однопользовательском режиме.
Эта команда гарантирует, что: · Страницы данных и индексов правильно связаны.
· Индексы отсортированы правильно и актуальны.
· Указатели согласованы.
· Данные на каждой странице актуальны.
· Смещения страниц актуальны.
Ниже три самых общих способа использоватния CheckDB:
DBCC CHECKDB ('AdventureWorks', REPAIR_FAST)
DBCC CHECKDB ('AdventureWorks', REPAIR_REBUILD)
DBCC CHECKDB ('AdventureWorks', REPAIR_ALLOW_DATA_LOSS)
Любые проблемы, с которыми Вы сталкиваетесь, чаще всего будут связаны с одной или более таблицами базы данных, а не всей базы данных. В таких случаях, запускайте DBCC CheckTable. Сначала перейдите в требуемую базу данных, а затем выполните команду DBCC CheckTable. Вот два примера:
DBCC CheckTable ('Sales,SalesOrderHeader')
DBCC CheckTable ('Sales,SalesOrderHeader', REPAIR_REBUILD)
Эта команда проверяет согласованность страниц данных и их индексов. Ниже два примера:
DBCC CHECKALLOC ('Sales.SalesOrderDetails')
DBCC CHECKALLOC ('Sales.SalesOrderDetails', REPAIR_REBUILD)
Используйте эту команду для проверки согласованности системных таблиц базы данных. Вы задаете имя базы данных, которую требуется проверить и необязательный аргумент WITH NO_INFOMSGS. Например:
DBCC CHECKCATALOG ('AdventureWorks')
Эта команда вызывает перестройку одного или более индексов на заданной таблице или представлении. Вы можете также задать имя конкретного индекса, а также коэффициент заполнения (fill factor). Ниже два примера.
DBCC REINDEX ('AdventureWorks.Sales.SalesOrderHeader', PK_SalesOrderHeader_SalesOrderID'
DBCC REINDEX ('AdventureWorks.Sales.SalesOrderHeader', PK_SalesOrderHeader_SalesOrderID',
90)
Третий аргумент указывает, что я хочу получить коэффициент заполнения 90 % на перестроенном индексе.
Дополнительная информация Теперь, когда Вы знаете самые общие примеры использования DBCC, обратитесь к Books Online за информацией о дополнительных аргументах и опциях для каждого варианта команды.