Восстановление базы MSSQL из состояния SUSPECT и RECOVERY PENDING
База данных переходит в нерабочее состояние при старте службы SQL Server или монтировании файлов:
- В консоли SSMS рядом с именем базы отображается красный статус (SUSPECT) или желтый (Recovery Pending);
- Попытка подключиться к базе возвращает ошибку
Database 'ERP_1C' cannot be opened. It is in the middle of a recovery. (Error: 926); - Служба MSSQL не смогла завершить фазу Redo/Undo из-за недоступности файлов данных или журнала транзакций.
1. Идентификация причин сбоя в SQL Server Errorlog
Проанализируйте системный журнал для выявления сбойного файла:
EXEC xp_readerrorlog 0, 1, N'ERP_1C';Типичные причины: исчерпание места на диске, аварийное отключение питания во время записи LDF, повреждение заголовка файла данных или сбой прав сервисной учетной записи MSSQL.
2. Проверка состояния базы данных через sys.databases
SELECT name, state_desc, is_read_only, user_access_desc
FROM sys.databases
WHERE name = N'ERP_1C';3. Пошаговый протокол восстановления базы из SUSPECT
Шаг 1: Перевод базы в аварийный режим EMERGENCY (доступ только на чтение для sysadmin) и перевод в монопольный режим:
USE [master];
GO
ALTER DATABASE [ERP_1C] SET EMERGENCY;
GO
ALTER DATABASE [ERP_1C] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GOШаг 2: Проверка физической структуры и запуск процедуры восстановления:
DBCC CHECKDB ([ERP_1C], REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;
GOШаг 3: Возврат базы в нормальный режим работы:
ALTER DATABASE [ERP_1C] SET MULTI_USER;
GO
ALTER DATABASE [ERP_1C] SET ONLINE;
GO4. Действия при статусе RECOVERY PENDING из-за нехватки диска
Если статус вызван блокировкой диска: освободите место на накопителе, после чего переведите базу в оффлайн/онлайн:
ALTER DATABASE [ERP_1C] SET OFFLINE WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [ERP_1C] SET ONLINE; Частые вопросы (FAQ)
В чем разница между состояниями SUSPECT и RECOVERY PENDING?
RECOVERY PENDING означает, что движок SQL Server знает, что базу нужно восстановить, но процедура восстановления даже не смогла начаться (например, файл заблокирован антивирусом или диск недоступен). SUSPECT означает, что фаза восстановления началась, но прервалась из-за критического повреждения страниц данных или LDF.
Поможет ли перезагрузка службы SQL Server выйти из SUSPECT?
Нет, перезагрузка службы заставит SQL Server заново попытаться накатить транзакции из журнала. Если файл LDF поврежден, база гарантированно вернется в статус SUSPECT.
Что делать, если база не переводится в ONLINE после CHECKDB?
Проверьте статус через SELECT state_desc FROM sys.databases. Если состояние осталось RECOVERY_PENDING, проверьте журналы Windows Event Viewer (Application/System) на наличие ошибок файловой системы NTFS.
Сохраняются ли транзакции при переводе в EMERGENCY?
Режим EMERGENCY лишь снимает проверку транзакционной консистентности для администратора. Все незафиксированные на момент аварии транзакции не будут откатаны до применения процедур ремонта.