Как применить резервную копию журналов транзакций (Transact-SQL)
Для применения резервной копии журнала транзакций к базе данных необходимо выполнение следующих условий.
Перед созданием самой последней полной или разностной резервной копии базы данных необходимо, чтобы в базе данных использовалась модель полного восстановления (или модель восстановления с неполным протоколированием).
В последовательности восстановления должен указываться параметр WITH NORECOVERY, если восстанавливаются ранние резервные копии.
Резервные копии журналов необходимо применять в порядке их создания, без разрывов в цепочке журналов. За исключением последней резервной копии журналов, необходимо использовать параметр WITH NORECOVERY следующим образом:
RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY;
При применении последней резервной копии журналов можно сделать следующее.
Восстановить базу данных в составе последней инструкции BACKUP LOG:
RESTORE LOG <database_name> FROM <backup_device> WITH RECOVERY; GO
Подождать, а затем восстановить базу данных отдельной инструкцией RESTORE DATABASE:
RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY; RESTORE DATABASE <database_name> WITH RECOVERY; GO
В последнем случае можно проверить, восстановлены ли все нужные резервные копии журналов. Такой подход часто полезен при выполнении восстановления на момент времени.
Важно! |
---|
Во избежание неоднозначности в каждой инструкции WITH RECOVERY рекомендуется явное задание параметра WITH NORECOVERY или WITH RECOVERY. Это особенно важно учитывать при написании сценариев. |
Использование резервной копии журнала транзакций
Чтобы применить резервную копию журналов транзакций, выполните инструкцию RESTORE LOG, указав при этом:
имя базы данных, к которой будет применен журнал транзакций;
устройство резервного копирования, с которого будет восстановлена резервная копия журналов транзакций;
предложение NORECOVERY.
В этой инструкции применяется следующая основная синтаксическая конструкция:
RESTORE LOG имя_базы_данных FROM <устройство_резервного_копирования> WITH NORECOVERY.
Здесь имя_базы_данных — имя базы данных, а <устройство_резервного_копирования> — имя устройства, на котором содержится восстанавливаемая резервная копия журнала.
Повторите шаг 1 для каждой резервной копии журналов транзакций, которые необходимо применить.
После восстановления из последовательности восстановления последней резервной копии базу данных следует восстановить при помощи следующей инструкции:
RESTORE имя_базы_данных WITH RECOVERY
Важно! При создании зеркальной базы данных этап восстановления можно пропустить. Зеркальная база данных должна остаться в состоянии RESTORING.
Пример
По умолчанию база данных AdventureWorks пользуется простой моделью восстановления. В следующем примере для перехода на модель полного восстановления требуется изменить базу данных следующим образом:
ALTER DATABASE AdventureWorks SET RECOVERY FULL
А. Применение единичной резервной копии журналов транзакций
В следующем примере база данных AdventureWorks восстанавливается с помощью полной резервной копии базы данных, которая находится на устройстве резервного копирования с именем AdventureWorks_1. Затем применяется первая резервная копия журнала транзакций, находящаяся на устройстве с именем AdventureWorks_log. В заключение происходит восстановление базы данных.
RESTORE DATABASE AdventureWorks
FROM AdventureWorks_1
WITH NORECOVERY
GO
RESTORE LOG AdventureWorks
FROM AdventureWorks_log
WITH FILE = 1,
WITH NORECOVERY
GO
RESTORE DATABASE AdventureWorks
WITH RECOVERY
GO
Б. Применение нескольких резервных копий журналов транзакций
В следующем примере база данных AdventureWorks восстанавливается с помощью полной резервной копии базы данных, которая находится на устройстве резервного копирования с именем AdventureWorks_1. Затем последовательно применяются первые три копии журнала транзакций, находящиеся на устройстве с именем AdventureWorks_log. В заключение происходит восстановление базы данных.
RESTORE DATABASE AdventureWorks
FROM AdventureWorks_1
WITH NORECOVERY
GO
RESTORE LOG AdventureWorks
FROM AdventureWorks_log
WITH FILE = 1,
NORECOVERY
GO
RESTORE LOG AdventureWorks
FROM AdventureWorks_log
WITH FILE = 2,
WITH NORECOVERY
GO
RESTORE LOG AdventureWorks
FROM AdventureWorks_log
WITH FILE = 3,
WITH NORECOVERY
GO
RESTORE DATABASE AdventureWorks
WITH RECOVERY
GO
См. также