Опубликован: 29.07.2008 | Доступ: свободный | Студентов: 1879 / 489 | Оценка: 4.31 / 4.13 | Длительность: 09:00:00
Лекция 5:

Полная модель восстановления

< Лекция 4 || Лекция 5: 123 || Лекция 6 >

Восстановление базы данных через интерфейс среды SQL Server Management Studio

Во многих случаях самый простой способ восстановить базу данных – это воспользоваться интерфейсом SQL Server Management Studio. SQL Server Management Studio использует историю создания резервных копий, которая хранится в базе данных msdb, чтобы показать нам, какой способ восстановления базы данных является наилучшим..

Реализуем сценарий восстановления базы данных через интерфейс среды SQL Server Management Studio
  1. Выполните следующие инструкции в окне запроса SQL Server Management Studio, чтобы имитировать сценарий, в котором для базы данных AdventurеWorks выбрана простая стратегия восстановления с использованием полной и разностной резервных копий. При необходимости измените пути к устройствам резервного копирования.
    ALTER DATABASE AdventureWorks
    SET RECOVERY SIMPLE;
    —Создаем полную резервную копию базы данных
    BACKUP DATABASE AdventureWorks
    TO DISK = "T:\BACKUPS\ADVFULL.BAK"
    WITH INIT;
    —Имитируем выполнение транзакции
    UPDATE AdventureWorks.Person.Contact
    SET EmailAddress = "kim@testbackup.com"
    WHERE ContactID=3;
    —Создаем разностную резервную копию
    BACKUP DATABASE AdventureWorks
    TO DISK = "T:\BACKUPS\ADVDIFF.BAK"
    WITH INIT,Differential;
  2. Чтобы восстановить базу данных, откройте Object Explorer (Обозреватель объектов), выбрав команду Object Explorer (Обозреватель объектов) в меню View (Вид) или нажав клавишу F8.
  3. В дереве объектов разверните экземпляр SQL Server, откройте папку Databases (Базы данных) и щелкните правой кнопкой мыши на базе данных AdventurеWorks. В контекстном меню выберите команды Tasks, Restore, Database (Задачи, Восстановить, База данных).
  4. В открывшемся диалоговом окне Restore Database (Восстановление базы данных) вы увидите, что самые последние наборы резервных копий уже выбраны для восстановления, как показано на рис. 5.1. Чтобы завершить восстановление, просто нажмите кнопку OK.
    Примечание. Убедитесь, что с базой данных AdventurеWorks не открыто ни одного соединения, поскольку в процессе восстановления соединения с базой данных не разрешены.
    Диалоговое окно Восстановление базы данных

    увеличить изображение
    Рис. 5.1. Диалоговое окно Восстановление базы данных
  5. На экране должно появиться сообщение, информирующее об успешном восстановлении базы данных.
  6. Откройте окно New Query (Новый запрос) и проверьте успешность восстановления данных из обеих резервных копий, для чего введите и выполните следующий код:
    USE AdventureWorks;
    GO
    SELECT EmailAddress
    FROM Person.Contact
    WHERE ContactID =3;

    В панели результатов должно отобразиться kim@testbackup.com.

Примечание. Как видите, нет необходимости в удалении базы данных, которую вы хотите восстановить. Процесс восстановления автоматически удаляет эту базу данных на первом этапе.

Восстановление базы данных при простой стратегии резервного копирования с использованием T-SQL

Представьте себе, что вы создали резервную копию, описанную в предыдущем примере. Чтобы восстановить базу данных при помощи T-SQL, используется инструкция RESTORE DATABASE. Синтаксис этой инструкции аналогичен инструкции BACKUP. Необходимо указать имя базы данных и путь к устройству резервного копирования.

Восстанавливаем данные из полной резервной копии при помощи инструкций T-SQL
  1. В окне SQL Server Management Studio откройте окно New Query (Новый запрос).
  2. Чтобы восстановить базу данных AdventurеWorks, ведите и выполните следующую инструкцию RESTORE DATABASE. Как всегда, убедитесь, что при выполнении запросов с базой данных не установлено ни одного соединения.
    USE MASTER
    GO
    RESTORE DATABASE AdventureWorks
    FROM DISK='T:\BACKUPS\ADVFULL.BAK'
  3. Выполните следующий запрос: Теперь результат должен содержать kim2@adventureworks.com, поскольку данное обновление произошло после создания полной резервной копии.
    SELECT EmailAddress
    FROM AdventureWorks.Person.Contact
    WHERE ContactID = 3

В процессе этой процедуры восстанавливаются только данные полной резервной копии. После восстановления база данных автоматически переводится в рабочий режим, возвращаясь к исходным параметрам. Если нужно также применить разностную резервную копию, необходимо сообщить SQL Server о том, что не следует переводить базу данных в рабочий режим до завершения полного восстановления, поскольку это сделает невозможным восстановление данных из разностной резервной копии. Для этого используется параметр NORECOVERY. Параметр NORECOVERY должен присутствовать во всех инструкциях RESTORE, за исключением последней в цикле восстановления. В следующем примере мы воспользуемся параметром NORECOVERY при восстановлении данных из полной и разностной резервных копий, выполненных ранее.

Восстанавливаем данные из разностных резервных копий при помощи инструкций T-SQL
  1. В окне SQL Server Management Studio откройте окно New Query (Новый запрос).
  2. Чтобы восстановить базу данных AdventurеWorks с использованием параметра NORECOVERY, ведите и выполните следующую инструкцию RESTORE DATABASE.
    USE MASTER
    GO
    RESTORE DATABASE AdventureWorks
    FROM DISK='T:\BACKUPS\ADVFULL.BAK'
    WITH NORECOVERY
  3. Чтобы восстановить данные из разностной копии, ведите и выполните следующую инструкцию RESTORE DATABASE.
    USE MASTER
    GO
    RESTORE DATABASE AdventureWorks
    FROM DISK='T:\BACKUPS\ADVDIFF.BAK'
  4. Выполните следующий запрос: Результатом должно стать значение kim@testbackup.com. Поскольку это обновление было выполнено между созданием полной и разностной резервных копий, можно быть уверенным в том, что восстановление данных из разностной резервной копии прошло успешно.
    SELECT EmailAddress
    FROM AdventureWorks.Person.Contact
    WHERE ContactID = 3
Восстановление базы данных при полной стратегии резервного копирования с использованием T-SQL

В полной стратегии мы имеем комбинацию полной резервной копии и резервных копий журнала транзакций. Далее речь пойдет о восстановлении данных из этих резервных копий при помощи инструкций T-SQL.

Восстанавливаем данные из полной резервной копии и резервных копий журнала транзакций
  1. Для создания резервных копий базы данных AdventureWorks выполните следующий код. Этот код также обновит некоторые данные; данное обстоятельство можно использовать для проверки успешности восстановления.
    ALTER DATABASE AdventureWorks
    SET RECOVERY FULL;
    —Создаем полную резервную копию базы данных
    BACKUP DATABASE AdventureWorks
    TO DISK = "T:\BACKUPS\ADVFULL.BAK"
    WITH INIT;
    —Имитируем выполнение транзакции
    UPDATE AdventureWorks.Person.Contact
    SET EmailAddress = "AfterFull@test.com"
    WHERE ContactID=3;
    —Создаем резервную копию журнала транзакций
    BACKUP LOG AdventureWorks
    TO DISK = "T:\BACKUPS\ADVLOG1.BAK"
    WITH INIT;
    —Имитируем выполнение транзакции
    UPDATE AdventureWorks.Person.Contact
    SET EmailAddress = "AfterLog@test.com"
    WHERE ContactID=3;
  2. Теперь представим себе, что файл базы данных AdventurеWorks поврежден. Как было рассмотрено выше, несмотря на это, можно создать резервную копию журнала транзакций, чтобы зафиксировать последние записи, которые содержат транзакции, завершенные после создания последней резервной копии журнала транзакций. Для этого следует воспользоваться особым параметром NO_TRUNCATE.
    —Выполняем резервное копирование последних записей журнала транзакций
    BACKUP LOG AdventureWorks
    TO DISK = "T:\BACKUPS\ADVLOG2.BAK"
    WITH INIT, NO_TRUNCATE;
    Примечание. Если журнал транзакции поврежден, дальнейшее выполнение этого типа резервного копирования будет невозможным. В этом случае, можно восстановить данные только из резервной копии, созданной ранее.
  3. После того, как резервная копия журнала будет создана, можно использовать инструкцию RESTORE, чтобы сначала выполнить восстановление данных из полной резервной копии, а затем из двух резервных копий журнала транзакций. Как и для разностных резервных копий для всех операций восстановления за исключением последней используется параметр NORECOVERY. Журнал транзакций восстанавливается при помощи инструкции RESTORE LOG.
    — Переключаемся на базу данных master db
    USE master
    GO
    — Восстанавливаем данные из полной резервной копии
    RESTORE DATABASE AdventureWorks
    FROM DISK='T:\BACKUPS\ADVFULL.BAK'
    WITH REPLACE, NORECOVERY;
    — Восстанавливаем данные из первой резервной копии журнала транзакций
    RESTORE LOG AdventureWorks
    FROM DISK = "T:\BACKUPS\ADVLOG1.BAK"
    WITH NORECOVERY;
    — Восстанавливаем данные из второй резервной копии журнала транзакций
    RESTORE LOG AdventureWorks
    FROM DISK = "T:\BACKUPS\ADVLOG2.BAK";

    Параметр REPLACE в инструкции RESTORE DATABASE указывает SQL Server на то, что следует пропустить проверку безопасности и заменить файлы базы данных без дальнейших запросов.

  4. Выполните следующий запрос: В результате мы должны получить AfterLog@test.com, это показывает, что все транзакции были применены успешно.
    SELECT EmailAddress
    FROM AdventureWorks.Person.Contact
    WHERE ContactID = 3
< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Марат Уздемиров
Марат Уздемиров
Ярослав Малащенко
Ярослав Малащенко