Быстрый откат базы MSSQL на снимок: RESTORE WITH REVERT
Критический сбой обновления или массовая порча данных, требующая немедленного отката:
- Обновление конфигурации завершилось ошибкой структуры метаданных;
- Выполнение полного восстановления из бэкапа (Full Restore) займет 4-6 часов, что срывает бизнес-процессы;
- Необходимость возврата состояния базы данных объемом несколько терабайт за считанные секунды.
1. Требования перед выполнением отката (Reverting)
Для успешного применения команды REVERT должны соблюдаться жесткие условия:
- Существует ровно один моментальный снимок базы. Если их несколько — все остальные снимки необходимо удалить перед откатом;
- В базе отсутствуют файловые группы Read-Only, переведенные в этот статус после создания снимка;
- Все пользовательские подключения к базе и снимку должны быть принудительно разорваны.
2. Пошаговая процедура мгновенного отката базы
USE [master];
GO
-- 1. Переводим базу в монопольный режим и сбрасываем подключения
ALTER DATABASE [ERP_1C] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- 2. Выполняем мгновенный откат исходной базы на созданный ранее снимок
RESTORE DATABASE [ERP_1C]
FROM DATABASE_SNAPSHOT = N'ERP_1C_Snapshot_PreUpgrade';
GO
-- 3. Возвращаем многопользовательский доступ
ALTER DATABASE [ERP_1C] SET MULTI_USER;
GO3. Проверка статуса базы после отката
SELECT name, state_desc FROM sys.databases WHERE name = N'ERP_1C';
DBCC CHECKDB ([ERP_1C]) WITH NO_INFOMSGS; Частые вопросы (FAQ)
Удаляется ли файл снимка после выполнения отката?
Нет. Моментальный снимок остается существовать и после выполнения операции отката. Однако для актуализации данных после возобновления работы его рекомендуется удалить: DROP DATABASE [имя_снимка].
Сохраняется ли цепочка LSN журнала транзакций после отката на снимок?
Откат на снимок разрушает непрерывную цепочку журналов транзакций (Log Chain). После выполнения процедуры RESTORE DATABASE WITH REVERT необходимо немедленно сделать новый полный бэкап (Full Backup).
Почему команда RESTORE WITH REVERT возвращает ошибку о невозможности восстановления?
Убедитесь, что для этой базы не было создано два или более снимков. Если существует второй снимок, SQL Server заблокирует откат. Удалите лишние снимки через DROP DATABASE.
Сколько времени занимает откат базы размером 5 ТБ на снимок?
Откат занимает от нескольких секунд до пары минут, так как движок перезаписывает только те страницы, которые фактически изменились с момента фиксации снимка.