MSSQL Ошибка 8989: DBCC CHECKDB terminated abnormally
- Команда проверки падает:
Msg 8989, Level 16, State 1: DBCC CHECKDB terminated abnormally due to error 1807 / 701 / 823. - Регламентное задание ночной проверки целостности баз 1С не выполняется.
- В журнале SQL Server регистрируется сбой создания скрытого внутреннего снимка базы (Database Snapshot creation failed).
- Диск с базой данных
tempdbпереполняется до 100%.
1. Анализ первопричины сбоя (Вложенный Error Code)
Ошибка 8989 всегда является следствием другой ошибки, указанной в тексте сообщения:
- Error 701: Нехватка оперативной памяти для структур CHECKDB.
- Error 1827 / 1105: Переполнение диска файлами
tempdbили снимка базы. - Error 823/824: Ошибка чтения с диска физического сектора.
2. Расширение дискового пространства под tempdb
-- Перенос файлов tempdb на скоростной диск с достаточным объемом
ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'T:\TempDB\tempdb.mdf', SIZE = 10GB, FILEGROWTH = 1GB);
ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'T:\TempDB\templog.ldf', SIZE = 5GB, FILEGROWTH = 512MB);3. Запуск проверки с параметром PHYSICAL_ONLY
Если для полной проверки не хватает ресурсов, выполните быструю проверку только физического уровня (требует на 90% меньше памяти и tempdb):
DBCC CHECKDB ('DatabaseName') WITH PHYSICAL_ONLY, NO_INFOMSGS;4. Запуск проверки с ограничением параллелизма (MAXDOP)
-- Отключение параллелизма для снижения нагрузки на память
DBCC CHECKDB ('DatabaseName') WITH MAXDOP = 1, NO_INFOMSGS;5. Запуск проверки на базе без снимка (TABLOCK)
-- Проверка в монопольном режиме без создания Database Snapshot
ALTER DATABASE [DatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB ('DatabaseName') WITH TABLOCK, NO_INFOMSGS;
ALTER DATABASE [DatabaseName] SET MULTI_USER; Частые вопросы (FAQ)
Почему DBCC CHECKDB требует много места на диске?
CHECKDB создает внутренний скрытый моментальный снимок базы данных (Database Snapshot) на том же томе, где лежат файлы данных, а также активно использует tempdb для сортировки и построения графов распределения страниц.
Что делает опция WITH TABLOCK при запуске CHECKDB?
Опция WITH TABLOCK указывает CHECKDB не создавать моментальный снимок базы, а накладывать прямые разделяемые блокировки таблиц (Shared Locks). Это экономит диск, но блокирует параллельную работу пользователей.
Как проверить базу объемом больше 5 TB без падения по ошибке 8989?
Разбивайте проверку по дням: используйте DBCC CHECKTABLE для отдельных таблиц по расписанию, либо запускайте DBCC CHECKDB ... WITH PHYSICAL_ONLY в рабочие дни и полную проверку в выходные.
Влияет ли параметр max degree of parallelism на CHECKDB?
Да, по умолчанию CHECKDB использует все доступные ядра CPU и масштабирует структуры в памяти. Ограничение MAXDOP = 2 или 4 предотвращает исчерпание памяти.