Что такое DBCC?sql-55

DBCC (Database Console Commands) — это специальные команды SQL Server для администрирования, диагностики и обслуживания баз данных. Эти команды предоставляют DBA мощные инструменты для работы с внутренними структурами СУБД.

Основные категории команд DBCC

1. Команды проверки целостности

-- Проверка целостности всей базы данных
DBCC CHECKDB('AdventureWorks') WITH NO_INFOMSGS;

-- Проверка конкретной таблицы
DBCC CHECKTABLE('Sales.SalesOrderHeader');

-- Проверка индексов
DBCC CHECKALLOC('AdventureWorks');
  • CHECKDB: Полная проверка логической и физической целостности БД
  • CHECKTABLE: Проверка целостности конкретной таблицы
  • CHECKALLOC: Проверка согласованности страниц данных

2. Команды обслуживания

-- Реорганизация индекса
DBCC INDEXDEFRAG('AdventureWorks', 'HumanResources.Employee', PK_Employee_BusinessEntityID);

-- Перестроение индекса
DBCC DBREINDEX('Sales.SalesOrderDetail', PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID);

-- Очистка кэша
DBCC FREEPROCCACHE;
DBCC DROPCLEANBUFFERS;
  • INDEXDEFRAG/DBREINDEX: Оптимизация индексов
  • FREEPROCCACHE: Очистка кэша планов запросов
  • DROPCLEANBUFFERS: Очистка буферного кэша

3. Информационные команды

-- Показать статистику использования памяти
DBCC MEMORYSTATUS;

-- Информация о файлах БД
DBCC SHOWFILESTATS;

-- Показать параметры трассировки
DBCC TRACESTATUS;
  • MEMORYSTATUS: Детальная информация о памяти SQL Server
  • SHOWFILESTATS: Статистика по файлам данных
  • TRACESTATUS: Активные флаги трассировки

4. Команды диагностики

-- Проверка использования страниц
DBCC IND('AdventureWorks', 'Sales.SalesOrderHeader', -1);

-- Дамп страницы
DBCC PAGE('AdventureWorks', 1, 12345, 3);

-- Проверка блокировок
DBCC TRACEON(1222, -1); -- Включить логирование деадлоков
  • IND: Показывает структуру страниц индекса
  • PAGE: Просмотр содержимого конкретной страницы
  • TRACEON: Включение диагностических флагов

Важные параметры команд DBCC

  1. WITH NO_INFOMSGS: Подавление информационных сообщений
  2. WITH TABLOCK: Блокировка таблицы на время выполнения
  3. WITH ESTIMATEONLY: Оценка требований к tempdb без реального выполнения
  4. WITH PHYSICAL_ONLY: Быстрая проверка только физической целостности

Примеры сложных сценариев

Восстановление после повреждения

-- Проверка БД на ошибки
DBCC CHECKDB('CorruptedDB') WITH ALL_ERRORMSGS, NO_INFOMSGS;

-- Экстренное восстановление (если другие методы не работают)
DBCC CHECKDB('CorruptedDB', REPAIR_ALLOW_DATA_LOSS);

Внимание: REPAIR_ALLOW_DATA_LOSS может привести к потере данных!

Анализ производительности

-- Очистка кэша перед тестированием
DBCC FREEPROCCACHE;
DBCC DROPCLEANBUFFERS;

-- Запуск тестового запроса
SELECT * FROM LargeTable WHERE ...;

-- Просмотр статистик
DBCC SHOW_STATISTICS('LargeTable', 'IX_LargeTable_Column');

Безопасность и привилегии

Для выполнения большинства команд DBCC требуются:

  • sysadmin для системных команд
  • db_owner для команд работы с БД
  • CONTROL SERVER для диагностических команд

Лучшие практики

  1. CHECKDB: Выполнять регулярно (еженедельно) для критических БД
  2. Индексы: Реорганизовывать при фрагментации 5-30%, перестраивать при >30%
  3. Кэш: Очищать только для тестирования, не в production!
  4. Мониторинг: Использовать DBCC в сочетании с системными представлениями (DMVs)

Резюмируем: DBCC предоставляет администратору SQL Server мощный набор команд для обслуживания, диагностики и решения проблем. Эти команды работают на низком уровне с внутренними структурами СУБД и должны использоваться с пониманием их воздействия на систему. Для production-окружения особенно важно соблюдать осторожность с командами, изменяющими данные или структуры.