A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent
Ошибка "A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent" обычно возникает в SQL Server, особенно при выполнении задач обслуживания, репликации, зеркального отображения или других операций, требующих сбора метаданных (facts).
Возможные причины:
- Недостаточно места в базе данных
tempdb
— SQL Server активно используетtempdb
для временных объектов и операций. - Повреждение системных таблиц или несогласованность метаданных.
- Проблемы с правами доступа у учетной записи, под которой выполняется операция.
- Ошибка в самом процессе сбора метаданных (например, ошибка агента SQL или задачи обслуживания).
🔧 Решения:
1. Проверить место на диске и размер tempdb
- Убедитесь, что диск, на котором находится
tempdb
, не заполнен. - Проверьте текущий размер файлов
tempdb
:
SELECT name, size/128.0 AS CurrentSizeMB,
size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS FreeSpaceMB
FROM sys.database_files;
Что делать:
- Если свободное место мало, расширьте файлы
tempdb
или очистите диск. - Настройте автогrowth для
tempdb
(но не слишком часто — это может вызвать фрагментацию). - Для критических систем рекомендуется выделить отдельный диск для
tempdb
.
2. Проверить целостность системных таблиц
Если tempdb
в порядке, возможно, есть повреждения в системных таблицах.
Выполните проверку целостности:
DBCC CHECKDB('имя_вашей_базы_данных') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Для системной базы master
и других:
DBCC CHECKDB('master') WITH NO_INFOMSGS, ALL_ERRORMSGS;
DBCC CHECKDB('model') WITH NO_INFOMSGS, ALL_ERRORMSGS;
❗ Базу
tempdb
проверять напрямую нельзя, т.к. она пересоздается при каждом перезапуске SQL Server.
Если найдены ошибки — см. раздел восстановления.
3. Перезапустить службу SQL Server
Так как tempdb
пересоздается при старте, перезагрузка может решить проблемы с несогласованностью этой базы.
⚠️ Перед этим сохраните все данные и убедитесь, что это можно сделать без влияния на пользователей.
4. Проверить права доступа
Убедитесь, что аккаунт, под которым работает SQL Server Agent или выполняется задача, имеет нужные разрешения.
- Обычно это:
sysadmin
,db_owner
или другие роли, в зависимости от задачи. - Также проверьте права на доступ к каталогам с логами и файлами БД.
5. Проверить журнал SQL Server (SQL Server Error Log)
Иногда там содержится дополнительная информация об ошибке.
Открыть журнал можно через SSMS:
Management → SQL Server Logs
Ищите записи вокруг времени появления ошибки.
6. Обновление SQL Server
Это может быть известная проблема Microsoft. Убедитесь, что установлены последние обновления и Service Packs.
📝 Пример сценария
Вы получили ошибку при запуске задачи обслуживания "Сбор статистики использования".
- Вы проверяете
tempdb
— мало места. - Расширяете файлы
tempdb
вручную или увеличиваете автогроу. - Задача начинает работать нормально.
✅ Рекомендации
- Не используйте автоматическое расширение
tempdb
без контроля. - Используйте отдельный диск или LUN для
tempdb
. - Регулярно проверяйте целостность баз (
DBCC CHECKDB
). - Следите за логами SQL Server.