Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

MSSQL_TAIL_LOG_RECOVERY 1С:Предприятие и СУБД

Восстановление базы MSSQL при повреждении хвостовой части журнала: Tail-Log Backup

Обновлено: 26.08.2026 · Официальная документация ↗
  • Первичный файл данных (.mdf или .ndf) поврежден или недоступен из-за сбоя дискового массива, но файл журнала (.ldf) физически цел.
  • База данных находится в статусе RECOVERY_PENDING или SUSPECT.
  • Попытка выполнить обычный BACKUP LOG завершается ошибкой The database cannot be opened. It is in the middle of a restore.
  • Риск потери транзакций, совершенных с момента создания последнего планового бэкапа журнала.

1. Создание резервной копии заключительного фрагмента журнала (Tail-Log)

Опция WITH NORECOVERY переводит базу в состояние RESTORING и гарантирует, что новые транзакции не будут записаны:

BACKUP LOG [TradeEnterprise]
TO DISK = N'D:\Backups\TradeEnterprise_TailLog.trn'
WITH NORECOVERY, NO_TRUNCATE, CONTINUE_AFTER_ERROR;

2. Восстановление цепочки: Full Backup -> Diff Backup -> Log Backups

-- 1. Восстановление последнего полного бэкапа
RESTORE DATABASE [TradeEnterprise]
FROM DISK = N'D:\Backups\TradeEnterprise_Full.bak'
WITH NORECOVERY, REPLACE;

-- 2. Восстановление последней разностной копии (если имеется)
RESTORE DATABASE [TradeEnterprise]
FROM DISK = N'D:\Backups\TradeEnterprise_Diff.bak'
WITH NORECOVERY;

-- 3. Применение цепочки регулярных бэкапов журналов транзакций
RESTORE LOG [TradeEnterprise]
FROM DISK = N'D:\Backups\TradeEnterprise_Log_1.trn'
WITH NORECOVERY;

-- 4. Применение сохраненного Tail-Log бэкапа и ввод базы в строй
RESTORE LOG [TradeEnterprise]
FROM DISK = N'D:\Backups\TradeEnterprise_TailLog.trn'
WITH RECOVERY;

3. Проверка статуса базы данных после восстановления

SELECT name, state_desc, recovery_model_desc 
FROM sys.databases 
WHERE name = 'TradeEnterprise';
💡 Практика специалистов: При физической аварии диска с MDF-файлами никогда не отсоединяйте базу (sp_detach_db) и не перезапускайте инстанс MSSQL. Сначала немедленно снимите Tail-Log с параметром NO_TRUNCATE — это единственный шанс спасти данные за последние часы работы без потерь.

Частые вопросы (FAQ)

Что означает параметр NO_TRUNCATE в команде BACKUP LOG?

Параметр NO_TRUNCATE позволяет снять копию журнала транзакций даже в том случае, если файлы базы данных (.mdf) повреждены или экземпляр SQL Server не может получить к ним доступ.

Можно ли снять Tail-Log бэкап для базы данных в модели восстановления SIMPLE?

Нет. В простой модели восстановления (Simple Recovery Model) журнал автоматически усекается, поэтому создание копий журнала и резервирование хвоста лога невозможно.

Зачем указывать CONTINUE_AFTER_ERROR при создании Tail-Log?

Этот параметр принуждает SQL Server продолжить операцию бэкапа, даже если обнаружены повреждения страниц журнала, позволяя вытащить максимально возможное количество валидных транзакций.

Что произойдет, если забыть указать WITH NORECOVERY при создании Tail-Log?

База данных останется в режиме онлайн, в нее могут успеть записаться новые транзакции, что нарушит строгую LSN цепочку и сделает невозможным накат этого хвоста лога на старый полный бэкап.

Полезные материалы
Рекомендуем