Защита от случайного запуска базы при восстановлении: WITH NORECOVERY
- Случайное выполнение
RESTORE DATABASE ... WITH RECOVERYна промежуточном этапе, сделавшее невозможным применение последующих файлов логов (TRN). - Ошибка
The log in this backup set begins at LSN ... which is too recent to apply to the database. - Необходимость перевести базу в режим только для чтения (Read-Only) между этапами наката для проверки данных.
1. Накат полной цепочки бэкапов с опцией WITH NORECOVERY
Все промежуточные бэкапы (Full, Differential, Transaction Log) должны накатываться с параметром WITH NORECOVERY:
-- 1. Восстановление полного бэкапа без завершения транзакционного наката
RESTORE DATABASE [Accounting1C]
FROM DISK = N'D:\Backups\Accounting1C_Full.bak'
WITH NORECOVERY, REPLACE;
-- 2. Восстановление разностного бэкапа
RESTORE DATABASE [Accounting1C]
FROM DISK = N'D:\Backups\Accounting1C_Diff.bak'
WITH NORECOVERY;
-- 3. Накат инкрементальных логов транзакций
RESTORE LOG [Accounting1C]
FROM DISK = N'D:\Backups\Accounting1C_Log_1.trn'
WITH NORECOVERY;
RESTORE LOG [Accounting1C]
FROM DISK = N'D:\Backups\Accounting1C_Log_2.trn'
WITH NORECOVERY;2. Финализация восстановления (перевод в ONLINE)
Только после успешного наката последнего файла лога выполните финализацию:
-- Перевод базы в нормальный режим ONLINE
RESTORE DATABASE [Accounting1C] WITH RECOVERY;3. Использование режима WITH STANDBY для инспекции состояния
Если требуется проверить состояние базы на определенный момент времени перед накатом следующего лога:
RESTORE LOG [Accounting1C]
FROM DISK = N'D:\Backups\Accounting1C_Log_3.trn'
WITH STANDBY = N'D:\Backups\RollbackUndoFile.undo'; Частые вопросы (FAQ)
Что физически делает параметр WITH NORECOVERY?
Он выполняет только фазу REDO (накат зафиксированных транзакций), но пропускает фазу UNDO (откат незавершенных транзакций), оставляя базу в состоянии ожидания дополнительных файлов журналов.
Что делать, если база случайно восстановлена WITH RECOVERY раньше времени?
Применить оставшиеся бэкапы журналов станет невозможно из-за выполнения фазы UNDO. Процесс восстановления всей цепочки придется начинать с самого начала (с Full Backup).
Для чего нужен файл UNDO при использовании WITH STANDBY?
В режиме STANDBY незавершенные транзакции временно откатываются, чтобы базу можно было открыть в Read-Only, а информация для их повторного наката сохраняется в UNDO-файл.
Как перевести базу из статуса RESTORING в ONLINE без накатывания новых файлов?
Выполните команду: RESTORE DATABASE [ИмяБазы] WITH RECOVERY;.