MS SQL: база 1С в статусе Recovery Pending — как вернуть к жизни
- В среде SQL Server Management Studio (SSMS) рядом с именем базы 1С горит желтая надпись
Recovery Pending(Ожидание восстановления). - При попытке войти в 1С появляется ошибка
Не удалось открыть базу данных. - Служба SQL Server перезапустилась после аварийного отключения сервера или перезагрузки.
Почему база перешла в Recovery Pending
При старте SQL Server пытается запустить процедуру отката незавершенных транзакций (Recovery). Если файл журнала транзакций .ldf недоступен (например, переполнился диск, файл удален или заблокирован антивирусом), сервер не может гарантировать целостность и зависает в режиме ожидания.
Пошаговое возвращение базы в строй:
- Проверьте свободное место на дисках: Освободите место на дисках с файлами
.mdfи.ldf. В 80% случаев состояние Recovery Pending вызвано тем, что диску не хватает места для разворачивания лога. - Переведите базу в аварийный режим EMERGENCY: Откройте SSMS и выполните SQL-запрос:
ALTER DATABASE [ИмяБазы1С] SET EMERGENCY; ALTER DATABASE [ИмяБазы1С] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; - Пересоздайте поврежденный журнал транзакций (Rebuild Log):
DBCC CHECKDB ([ИмяБазы1С], REPAIR_ALLOW_DATA_LOSS); - Верните базу в штатный онлайн-режим:
ALTER DATABASE [ИмяБазы1С] SET MULTI_USER; ALTER DATABASE [ИмяБазы1С] SET ONLINE; - Проверьте статус: Обновите список баз в SSMS. База должна стать доступной (без надписей в скобках).
Частые вопросы (FAQ)
Чем отличается Recovery Pending от состояния Suspect?
Recovery Pending означает, что SQL Server знает, что нужно сделать для восстановления, но ему мешает внешний фактор (нехватка места, блокировка файла). Suspect означает прямое повреждение самого файла базы данных.
Безопасен ли режим EMERGENCY?
Режим EMERGENCY переводит базу в статус 'только для чтения' для спасения данных администратором. Сам по себе он безопасен и позволяет хотя бы выгрузить важные таблицы.
Почему удаление файла .ldf вручную приводит к этой ошибке?
SQL Server жестко связывает заголовок файла .mdf с журналом .ldf. Удаление лога 'на горячую' без процедуры Detach гарантированно переводит базу в сбойное состояние.
Что делать, если база не выходит из SINGLE_USER режима?
Найдите и завершите процесс, который занял единственное подключение (команда sp_who2), либо перезапустите службу SQL Server.