Все операции восстановления могут быть выполнены с помощью двух операторов Transact-SQL:
♦ restore database;
♦ restore log.
Оператор restore database используется для выполнения процесса восстановления для базы данных. Общий синтаксис этого оператора:
restore database [db_name | ^variable) [from device_list] [with option_list]
Здесь db_name- имя базы данных, которая будет восстанавливаться. Имя базы данных может задаваться и с использованием переменной ^variable. Параметр device_iist задает одно или более имен устройств, на которых располагается резервная копия базы данных. (Если вы не задаете предложение from, то будет иметь место только процесс автоматического восстановления, а не процесс восстановления с резервной копии, и в этом случае вы должны задать одну из опций recovery, norecovery или standby. Это действие возможно, если вы хотите переключиться на резервный сервер.) Параметр device_iist может быть списком имен дисковых файлов или магнитных лент. Параметр option_list содержит несколько опций, которые могут быть заданы для различных форм резервных копий. Наиболее важными опциями являются:
♦ recovery/norecovery/standby;
♦ checksum/no_checksum;
♦ replace;
♦ partial;
♦ stopat;
♦ stopatmark;
♦ stopbeforemark.
Опция recovery инструктирует Database Engine о том, что необходимо пропускать любые подтвержденные транзакции и отменять неподтвержденные транзакции. После применения опции recovery база данных будет находиться в согласованном состоянии и будет готовой для использования. Эта опция является опцией по умолчанию.
При опции norecovery Database Engine не выполняет откат неподтвержденных транзакций, потому что вы будете применять следующие резервные копии. После применения опции norecovery база данных будет недоступной для использования.
Опция standby является альтернативой для опций recovery и norecovery, она используется с резервным сервером. (Резервный сервер обсуждается в разд. «Использование резервного сервера» далее В этом разделе.) При доступе к данным, хранящимся на резервном сервере, вы обычно восстанавливаете базу данных после восстановления протокола транзакций. С другой стороны, если вы восстанавливаете базу данных на резервном сервере, вы не можете для процесса восстановления применять дополнительные журналы с производственного сервера. В этом случае вы используете опцию standby для того, чтобы разрешить пользователям обращаться к резервному серверу. Дополнительно вы позволяете системе выполнять восстановление с дополнительных протоколов транзакций. Опция standby предполагает существование файлов отмены, которые служат для отката изменений при восстановлении дополнительных протоколов.
Опция checksum инициирует верификацию контрольных сумм резервной копии и контрольных сумм страниц, если они присутствуют. Если контрольные суммы отсутствуют, операция restore выполняется без верификации. Опция no_checksum явно отменяет проверку контрольных сумм в операции восстановления.
Опция replace заменяет существующую базу данных данными из резервной копии другой базы данных. В этом случае сначала удаляется существующая база данных, а различия между именами файлов базы данных и именем базы данных игнорируются. (Если вы не используете опцию replace, то система базы данных выполняет безопасную проверку, которая гарантирует, что существующая база данных не будет заменяться, если имена файлов базы данных или имя самой базы данных отличаются от соответствующих имен в наборе резервной копии.)
Опция partial задает операцию частичного восстановления. С этой опцией вы можете восстанавливать часть базы данных, присутствующую в ее первичной файловой группе и в одной или более вторичных файловых групп, которые задаются в дополнительной опции под названием filegroup. (Опцию partial нельзя применять в операторе restore log.)
Опция stopat позволяет восстанавливать базу данных в том состоянии, которое она имела на конкретный момент времени до возникновения сбоя, при помощи задания точного времени. Database Engine восстанавливает все подтвержденные транзакции, которые были записаны в протокол транзакций до заданного момента времени. Если вы хотите восстанавливать базу данных, указывая момент времени, выполните оператор restore database с использованием предложения norecovery. После этого выполните оператор restore log для применения всех резервных копий протокола транзакций, указав имя базы данных, устройство резервной копии, с которой будет восстанавливаться резервная копия протокола транзакций, и задав предложение stopat.
Опции stopatmark и stopbeforemark задают восстановление до отметки. Эта тема описывается в разд. «Восстановление до отметки» далее В этом разделе.
Оператор restore database также используется для восстановления базы данных с дифференцированной резервной копии. Синтаксис и опции для восстановления базы данных с дифференцированной резервной копии такие же, как и для восстановления с полной резервной копии базы данных. В процессе восстановления с дифференцированной резервной копии Database Engine восстанавливает только часть базы данных, которая была изменена с момента последнего полного резервного копирования базы данных. Поэтому восстанавливайте полную резервную копию базы данных до того, как вы будете восстанавливать дифференцированную резервную копию!
Оператор restore log используется для выполнения процесса восстановления протокола транзакций. Этот оператор имеет ту же самую синтаксическую форму и те же самые опции, что и оператор restore database.
Восстановление баз данных и протоколов с использованием Management Studio
Для восстановления базы данных с полной резервной копии базы данных разверните сервер, выберите узел Databases и щелкните правой кнопкой мыши по базе данных. Затем щелкните по Tasks, выберите Restore, а затем Database. Появится диалоговое окно Restore Database (рис. 17.4). На странице General выберите базы данных, в которые и из которых вы хотите выполнять восстановление. Затем отметьте тип резервной копии, которую вы собираетесь обрабатывать (в данном случае Full Database Backup).
Для задания подходящих опций восстановления выберите страницу Options (рис. 17.5) в диалоговом окне Restore Database. В верхней части этого окна выберите один или несколько типов восстановления. В нижней части этого окна вы можете выбрать одну из трех существующих опций. Выбор первой опции, Leave the database ready to use by rolling back uncommitted transactions, указывает Database Engine, что нужно пройти по всем подтвержденным транзакциям и отменить все неподтвержденные транзакции. После применения этой опции база данных будет находиться в согласованном состоянии и будет готовой для использования. Эта опция эквивалентна опции recovery в операторе restore database.
Если вы щелкнете по второй опции, Leave the database non-operational, and do not roll back uncommitted transactions, Database Engine не выполнит откат неподтвержденных транзакций, потому что вы будете использовать последующие резервные копии. После того как вы примените эту опцию, база данных не будет доступной для использования, нужно будет восстановить дополнительные протоколы транзакций. Эта опция эквивалентна опции norecovery в операторе restore database.
Выбор третьей опции, Leave the database in read-only mode, задает файл (в диалоговом окне Standby file), который впоследствии будет использован для отмены эффектов восстановления. Эта опция эквивалентна опции standby в операторе restore database.
Процесс восстановления базы данных из дифференцированной резервной копии базы данных эквивалентен процессу восстановления из полной резервной копии базы данных. В этом случае вы должны отметить Differential Database Backup в качестве типа резервной копии в диалоговом окне Restore Database. Единственным отличием от восстановления полной резервной копии базы данных является то, что только первая опция в нижней половине страницы Options (Leave the database ready to use by rolling back uncommitted transactions) может быть использована для восстановления из дифференцированной резервной копии.
Для восстановления базы данных с новым именем разверните Databases и щелкните правой кнопкой мыши по базе данных. После щелчка по Tasks выберите Restore, а затем Database. В странице Generals диалогового окна Restore Database в раскрывающемся списке To database введите имя базы данных, которую вы собираетесь создать, а в раскрывающемся списке From database введите имя базы данных, чья резервная копия будет использована.