Вопрос 21: Процесс восстановления (recovery) данных. Различные варианты восстановления данных из резервной копии. Восстановление данных на уровне страниц из полной резервной копии.
Процесс восстановления данных
Восстановление БД - процесс копирования данных из резервной копии и последующее применение к данных, зарегистрированных в журнале транзакций, с целью наката БД до целевой точки восстановления. Восстановление БД зависит от выбранной модели.
Фазы процесса восстановления:
- копирование данных (copy data) - включает копирования всех данных, журнала транзакций и страниц индекса с резервного носителя БД в файлы БД;
- повторное выполнение/накат (redo) - на данном этапе зарегистрированные в журнале транзакции применяются в данным, скопированным из резервной копии для наката этих данных до точки восстановления;
- Отмена (undo) - на этапе отмены выполлняется откат всех незафиксированных транзакций, и БД делается доступной для пользователей. После этапа отката последующие резервные копии не могут быть восстановлены.
Различные варианты восстановления
Восстановление БД выполняется с помощью инструкции RESTORE. Параметры RECOVERY, NORECOVERY или STANDBY определяют особенности процесса восстановления. RECOVERY - yастраивает операцию восстановления на откат любых незавершенных транзакций. После процедуры восстановления база данных готова к использованию.
RESTORE DATABASE AdventureWorks
FROM AWBAck
WITH RECOVERY
NORECOVERY - Настраивает операцию восстановления на отмену отката любых незавершенных транзакций. Если впоследствии должен применяться другой журнал транзакций, то следует указать параметр NORECOVERY или STANDBY.
RESTORE DATABASE AdventureWorks
FROM AWBAck
WITH NORECOVERY
STANDBY - Указывает резервный файл, с помощью которого можно отменить результаты восстановления.
RESTORE DATABASE AdventureWorks
FROM AWBAck
WITH STANDBY='FILE.bak'
Восстановление полной или дифференцированный резервной копии:
RESTORE DATABASE AdventureWorks
FROM AWBAck
WITH RECOVERY
Восстановление журнала транзакций:
RESTORE LOG AdventureWorks
FROM AWLog
WITH NORECOVERY
Восстановление БД до определенного момента времени Чтобы восстановить только изменения до определенного момента времени, для каждой восстанавливаемой резервной копии укажите WITH STOPAT = time.
RESTORE LOG AdventureWorks
FROM AdventureWorksBackups
WITH NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
Восстановление данных на уровне страниц
Восстановление страницы предназначено для исправления отдельных поврежденных страниц. Восстановление нескольких отдельных страниц может потребовать меньше времени, чем восстановление файла, и уменьшить объем данных, которые будут недоступны во время операции восстановления вне сети.
RESTORE DATABASE <database_name>
PAGE = '<file: page> [ ,... n ] ' [ ,... n ]
FROM <backup_device> [ ,... n ]
WITH NORECOVERY
Пример В этом примере восстанавливаются четыре поврежденные страницы файла B в режиме NORECOVERY. Далее, после применения двух резервных копий журналов с параметром NORECOVERY, следует восстановление резервной копии заключительного фрагмента журнала с параметром RECOVERY. В этом примере выполняется восстановление в сети. В следующем примере идентификатором файла B является 1, а идентификаторами поврежденных страниц — 57, 202, 916и 1016.
RESTORE DATABASE <database> PAGE='1:57, 1:202, 1:916, 1:1016'
FROM <file_backup_of_file_B>
WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup>
WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup>
WITH NORECOVERY;
BACKUP LOG <database> TO <new_log_backup>;
RESTORE LOG <database> FROM <new_log_backup> WITH RECOVERY;
GO