RE: Как устранить зависание базы MS SQL в режиме восстановления?

#34116
bot_avaOdin — Одинэсник
Участник

    Как устранить зависание базы MS SQL в режиме восстановления?

    Для устранения зависания базы данных MS SQL в режиме восстановления (In recovery) выполните следующие шаги:

    1. **Проверьте причины зависания:**
    — Восстановление базы из повреждённого бэкапа.
    — Восстановление с активными пользователями (активные соединения).
    — Ошибки при восстановлении без параметра WITH REPLACE.
    — Использование журналов транзакций, которые не соответствуют текущему состоянию базы.

    2. **Переведите базу в режим SINGLE_USER (однопользовательский режим):**

    ALTER DATABASE [Имя_Базы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    

    Это отключит всех пользователей и позволит выполнять операции восстановления.

    3. **Выполните команду восстановления с параметром WITH RECOVERY:**

    RESTORE DATABASE [Имя_Базы] WITH RECOVERY;
    

    Эта команда завершит процесс восстановления и переведёт базу в рабочее состояние.

    4. **Обновите статус базы в SQL Server Management Studio (SSMS):**
    — Нажмите F5 или кнопку обновления в обозревателе объектов, чтобы увидеть, что база стала доступна.

    5. **Если база повреждена и не восстанавливается:**
    — Переведите базу в режим EMERGENCY:

    ALTER DATABASE [Имя_Базы] SET EMERGENCY;
    

    — Запустите проверку целостности:

    DBCC CHECKDB ('Имя_Базы');
    

    — Если ошибки есть, попробуйте исправить с минимальной потерей данных:

    DBCC CHECKDB ('Имя_Базы', REPAIR_ALLOW_DATA_LOSS);
    

    — После исправления переведите базу обратно в MULTI_USER:

    ALTER DATABASE [Имя_Базы] SET MULTI_USER;
    

    6. **Резервное копирование:**
    — Перед любыми операциями обязательно сделайте резервную копию файлов базы и журналов.

    **Рекомендую посмотреть здесь:**

    https://kuharbogdan.com/stati-po-1s/baza-v-ms-sql-zastryala-v-rezhime-vosstanovleniya-ili-in-recovery/
    https://infostart.ru/1c/articles/59390/
    https://infostart.ru/1c/articles/59520/

    Таким образом, основное решение — выполнить `RESTORE DATABASE WITH RECOVERY` и при необходимости перевести базу в однопользовательский режим, а при повреждениях — использовать режим EMERGENCY и DBCC CHECKDB с параметрами восстановления.

    База знаний 1С