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

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

< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Аннотация: Данная лекция посвящена полной модели восстановления. Рассматривается модель восстановления с неполным протоколированием, восстановление базы из резервных копий и восстановление базы данных при простой стратегии резервного копирования с использованием T-SQL

Как уже упоминалось ранее, необходимо заранее указать SQL Server, какую стратегию резервного копирования вы планируете реализовать. Если используются только полные и разностные резервные копии базы данных, то следует выбрать простую модель восстановления. Если нужно использовать также резервные копии журналов транзакций, то следует выбрать полную модель восстановления ( FULL ) или модель с неполным протоколированием BULK_LOGGED. Выбрав полную модель восстановления, мы сообщаем SQL Server, что необходимо создавать резервные копии журнала транзакций. Чтобы сделать это возможным, SQL Server сохраняет все транзакции в журнале транзакций до тех пор, пока не будет создана резервная копия журнала. При выполнении резервного копирования журнала транзакций, SQL Server выполняет усечение журнала транзакций после того, как резервная копия записана на устройство резервного копирования. В простом режиме журнал транзакций усекается после каждой контрольной точки; это означает, что зафиксированные транзакции (которые уже записаны в файлы данных) удаляются из журнала транзакций. Таким образом, в простом режиме резервные копии журнала транзакций не могут быть созданы.

Важно. Очень важно выполнять резервное копирование журнала транзакций, когда база данных находится в полном режиме восстановления. Если резервные копии журнала транзакций не создаются, то файл журнала разрастается до максимального размера. Когда он переполнится и больше не сможет расти, то дальнейшее выполнение транзакций станет невозможным. Код для выполнения резервного копирования журнала транзакций можно найти в разделе "Создание резервных копий журнала транзакций".

Чтобы выбрать модель восстановления FULL, можно использовать инструкцию ALTER DATABASE. Следующий код устанавливает режим восстановления базы данных AdventurеWorks в значение FULL.

USE master;
GO
ALTER DATABASE AdventureWorks
SET RECOVERY FULL;
GO

Модель восстановления с неполным протоколированием

В модели полного восстановления высокопроизводительные операции массового копирования (операции, которые изменяют сразу большие количества данных) полностью протоколируются, чтобы сделать возможным резервное копирование журнала транзакций. В некоторых базах данных эта модель восстановления не может использоваться регулярно из-за ограничений на размер журнала транзакций и проблемы с производительностью, которые появляются из-за полного протоколирования высокопроизводительных операций массового копирования. Логично, что, существует модель восстановления с неполным протоколированием. Она позволяет создавать резервные копии журнала транзакций для фиксации и журнала, и результатов любых высокопроизводительных операций массового копирования, но при этом не имеет указанных недостатков. В рамках модели восстановления с неполным протоколированием невозможно восстановить базу данных на определенный момент времени. Кроме того, невозможно выполнять резервное копирование журнала транзакций, когда файл данных повр ежден, а высокопроизводительная операция массового копирования может произойти после того, как резервная копия файла журнала транзакций уже была создана. Это один из основных недостатков резервного копирования журнала транзакций. Следовательно, модель восстановления с неполным протоколированием следует включать только на период выполнения высокопроизводительных операций массового копирования и, по возможности, на непродолжительное время. В остальное время следует использовать полную модель восстановления. Не используйте модель восстановления с неполным протоколированием, если у вас не возникает проблем при использовании только полностью протоколируемых операций. Дополнительную информацию можно найти в Электронной документации по SQL Server 2005, тема "Резервное копирование в модели восстановления с неполным протоколированием".

Создание резервных копий журнала транзакций

Чтобы выполнить резервное копирование журнала транзакций, следует выбрать полную модель восстановления, причем после изменения модели восстановления должна быть создана хотя бы одна полная резервная копия базы данных. Резервное копирование журнала транзакций выполняется с помощью инструкции BACKUP LOG. Как всегда, следует указать имя базы данных и устройство резервного копирования. Типы устройств резервного копирования в этом случае не отличаются от тех, которые используются для создания полных и разностных резервных копий.

Чтобы создать резервную копию журнала транзакций базы данных AdventurеWorks на физическом устройстве, выполните следующие действия.

Создаем резервную копию файла журнала транзакций
  1. Установите полную ( FULL ) модель восстановления.
  2. Создайте хотя бы одну полную резервную копию базы данных.
  3. Создайте резервную копию журнала транзакций базы данных AdventurеWorks на физическом устройстве при помощи следующей инструкции SQL:
    USE master;
    GO
    BACKUP LOG AdventureWorks
    TO DISK='t:\adv_log.bak'

Как и в других инструкциях резервного копирования, процесс дописывает резервную копию на устройство резервного копирования, если в инструкции BACKUP не указан другой вариант. Чтобы перезаписать резервные копии на устройстве, используется инструкция WITH INIT.

USE master;
GO
BACKUP LOG AdventureWorks
TO DISK='t:\adv_log.bak'
WITH INIT

Восстановление базы данных из резервных копий

В предыдущем разделе мы выполняли различные виды резервного копирования, но процесс восстановления при этом подразумевался только в теории. Теперь мы узнаем, как восстановить базу данных различными способами.

Извлечение информации резервного копирования

Прежде, чем приступить к восстановлению базы данных, необходимо знать, какую резервную копию выбрать для восстановления. SQL Server хранит историю резервного копирования, в которой есть информация о каждой отдельной резервной копии, созданной для базы данных, в базе данных msdb. Чтобы найти нужную для восстановления резервную копию, можно выполнить запрос к базе данных msdb.

Создаем информацию простого резервного копирования
  1. В меню Start (Пуск) выберите All Programs,. Microsoft SQL Server 2005, SQL Server Management Studio (Все программы, Microsoft SQL Server 2005, Среда SQL Server Management Studio).
  2. В диалоговом окне Connect To Server (Соединение с сервером) нажмите кнопку Connect (Соединить).
  3. В панели инструментов Standard (Стандартная) нажмите кнопку New Query (Новый запрос), чтобы открыть окно New Query (Новый запрос).
  4. Введите и выполните следующие инструкции BACKUP, чтобы создать полную и разностную резервные копии базы данных AdventurеWorks.
    ALTER DATABASE AdventureWorks
    SET RECOVERY SIMPLE;
    —Создаем полную резервную копию базы данных
    BACKUP DATABASE AdventureWorks
    TO DISK = "T:\BACKUPS\ADVFULL.BAK"
    WITH INIT;
    —Создаем разностную резервную копию 
    BACKUP DATABASE AdventureWorks   
    TO DISK = "T:\BACKUPS\ADVDIFF.BAK" 
    WITH INIT,Differential;
Получаем общую информацию резервного копирования
  1. Чтобы получить информацию о том, какие резервные копии были созданы в базе данных AdventurеWorks, выполните следующую инструкцию SELECT:
    USE msdb
    GO
    SELECT backup_start_date,type, physical_device_name,backup_set_id
    FROM backupset bs inner join backupmediafamily bm
    ON bs.media_set_id = bm.media_set_id
    WHERE database_name ='AdventureWorks'
    ORDER BY backup_start_date desc

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

  2. Каждая резервная копия получает уникальный идентификатор, который называется идентификатором набора резервных копий; этот идентификатор можно увидеть в окне результатов, которое показано на следующем рисунке.

    Используя приведенную выше информацию, можно узнать, какие файлы данных и журналов были включены в резервные копии и в каких папках они первоначально хранились. Следующий запрос получает эту информацию для идентификатора набора 62. Выполняя этот запрос, обязательно измените backup_set_id с 62 на идентификатор полной резервной копии, найденной на предыдущем этапе.

    SELECT filegroup_name,logical_name,physical_name
    FROM msdb..backupfile
    WHERE backup_set_id = 62
    —change to your backup_set_id
  3. В некоторых ситуациях в базе данных msdb может не оказаться необходимой информации. Это может произойти, если база данных msdb была повреждена при аварийной ситуации или если резервное копирование выполнялось на другой системе. В этих случаях можно получить необходимую информацию только непосредственно с устройства резервного копирования. Чтобы получить информацию о резервных копиях, которые находятся на T:\BACKUPS\ADVFULL.BAK', введите и выполните следующую инструкцию.
    RESTORE HEADERONLY FROM DISK='T:\BACKUPS\ADVFULL.BAK'
  4. Чтобы получить информацию о файлах данных и журналов, которые были включены в резервные копии, хранящиеся на данном устройстве, выполните инструкцию RESTORE FILELISTONLY.
    RESTORE FILELISTONLY 
    FROM DISK ='T:\BACKUPS\ADVFULL.BAK'
< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Марат Уздемиров
Марат Уздемиров
Ярослав Малащенко
Ярослав Малащенко