Главная » Microsoft SQL Server, Базы данных » Операции восстановления

0

Существует множество причин восстановления базы данных, среди которых следующие.

?               Произошло повреждение дисковой подсистемы.

?               Невнимательный программист забыл вставить предложение WHERE в инструкцию UPDATE и заменил зарплату всех сотрудников минимальной.

?               Сервер упал в резервуар с силиконом, и винчестер превратился в булыжник.

?               Была проделана большая работа по импорту данных, но не тем числом.

Лучше всего вначале опробовать цикл резервирования/восстановления и убедиться, что план восстановления работает. Если нет гарантий работоспособности плана, то нет никакого смысла выполнять резервирование данных.

Идентификация проблемы

Если существует какая-либо проблема, связанная с базой данных, Management Studio отображает ее как недоступную В этом случае, чтобы идентифицировать проблему, нужно просмотреть файл журнала (рис. 36.5).

Рис. 36.5. База данных AdventureWorks повреждена (для этого я остановил SQL Server и подправил вручную в шестнадцатеричном редакторе заголовок файла). Management Studio отображает базу без дерева объектов. Ниже в дереве консоли находятся узлы журналов SQL Server

Чтобы продолжить исследование проблемы, просмотрите журнал SQL Server. Для этого в Management Studio выберите пункт меню Managements SQL Server Logs. SQL Server записывает ошибки и события в специальный файл журнала, который находится в подкаталоге /error папки установки сервера. Этот файл создается заново при каждом запуске SQL Server, при этом шесть предыдущих версий этого файла сохраняются там же. Некоторые ошибки параллельно могут быть записаны в журнал событий приложений операционной системы Windows.

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

С восстановлением данных связаны две очень важные концепции.

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

?               Реставрация и восстановление — две различные операции. При реставрации данные копируются назад в базу, при этом транзакции остаются открытыми. Восстановление представляет собой процесс обработки транзакций, которые остались открытыми в журнале. Например, если в операции участвуют четыре файла архива журнала транзакций, только последний из них реставрируется с восстановлением.

Только члены фиксированной серверной роли SysAdmins могут воссоздавать базу данных, которая еще не существует. Те же базы данных, которые уже существуют, могут воссоздавать члены уже двух ролей: SysAdnins и db_owners.

Реальный состав работ при восстановлении зависит от типа повреждения и существующего плана восстановления. В табл. 36.2 приведены сравнительные списки операций восстановления в различных ситуациях.

Таблица 36.2. Последовательности восстановления

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

Поврежден файл данных

Поврежден журнал транзакций

Простая

1. Перезапуск сервера.

Перезапуск сервера. При этом автомати

2.               Воссоздание из полной резервной копии.

3.               Воссоздание из последней дифференцированной резервной копии (если нужно)

чески создается новый журнал транзакций размером в 1 Мбайт

Полная или с

1. Резервирование текущего состояния

1. Воссоздание из полной резервной ко

неполным про

журнала транзакций с параметром

пии.

токолированием

no_truncate.

2. Воссоздание из последней дифферен

2. Воссоздание из полной резервной копии.

циальной резервной копии (если нужно).

3. Воссоздание из последней дифференци

3. Восстановление из всех резервных ко

рованной копии.

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

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

последнего дифференцированного резервирования.

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

следнего дифференцированного резерви

Все транзакции, выполненные после по

рования. Все подтвержденные транзакции будут восстановлены

следнего резервирования, будут утеряны

Если в базе данных используется модель восстановления с неполным протоколированием и с момента последнего резервирования журнала транзакций была выполнена какая-либо массовая операция, то восстановление не произойдет. Все транзакции, выполненные после последнего резервирования журнала транзакций, не восстанавливаются.

Воссоздание базы данных в Management Studio

Как и в случае резервирования, существует несколько способов запуска восстановления в утилите Management Studio.

?               Выделите базу данных, которую будете воссоздавать. В контекстном или главном меню Action выберите пункт All Tasks^Backup Restore.

?               Выберите в меню пункт Tasks ^Restore ^Database.

?               Щелкните правой кнопкой мыши на узле Databases дерева консоли и выберите в контекстном меню пункт Restore Database.

В любом случае откроется форма Restore Database (рис. 36.6), которая проведет вас сквозь потенциальный хаос последовательностей восстановления; она всегда предлагает только допустимые варианты воссоздания.

Рис. 36.6. В форме Restore Database утилиты SQL Sender Management Studio доступны только корректные последовательности воссоздания базы данных

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

Диалоговое окно Restore Database позволяет воссоздать базу или файлы из резервных копий, находящихся в файлах на диске или на других устройствах (например, на ленточных). Мастер Restore Wizard для баз данных представит вам иерархическое дерево резервных копий, в то время как для файлов и файловых групп будут перечислены файлы, которые должны быть восстановлены вручную в корректном порядке.

Параметр Show backups of database используется для выбора первой резервной копии из последовательности, которая подлежит воссозданию. Основываясь на выбранной

последовательности, в таблице отобразится иерархическое дерево возможных последовательностей архивов.

?               Полные резервные копии базы данных отображаются с золотым значком жесткого диска на верхнем уровне дерева.

?               Дифференцированные резервные копии отображаются с синим значком жесткого диска на втором уровне дерева.

?               Резервные копии журнала транзакций отображаются со значком ноутбука на нижнем уровне дерева.

В зависимости от выбранных полных и дифференцированных резервных копий далее могут быть выбраны только определенные дифференцированные и транзакционные архивы.

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

Если одним из воссоздаваемых файлов является резервная копия журнала транзакций, то становится доступным параметр Point in Time Restore. Этот параметр позволяет восстановить из копии журнала только часть транзакций, зарегистрированных до заданной точки во времени.

Вкладка Options диалогового окна Restore Database позволяет установить ряд важных параметров.

?               Параметр Overwrite the existing database отключает проверку безопасности, исключающую возможность случайного замещения базы данных А резервной копией базы данных Б. В большинстве случаев этот параметр устанавливать не нужно.

?               Так как вполне возможно, что воссоздаваемая база данных должна находиться на диске в месте, отличном от того, из которого создавалась резервная копия, во вкладке Options можно выбрать нужную папку назначения.

?               Параметр Recovery State позволяет доставить протокол на сервер, находящийся в режиме ожидания. В обычных условиях этот параметр следует оставить рабочим.

?               Если воссоздавать следует только определенные файлы и файловые группы, то параметр Restore: Files or File Groups позволит выбрать эти объекты.

?               Если журнал создания резервных копий, хранимый в базе данных msdb, недоступен (по причине того, что сервер был переустановлен или база данных восстанавливается на другом сервере), то параметр Restore: From Device можно использовать для ручного выбора конкретного файла или устройства с резервной копией, а также экземпляра резервной копии в файле.

SQL Server способен частично воссоздавать страницы данных. Эта возмож- Новинка      ность может оказаться особенно полезной, когда в базе данных объемом в не-

2005   сколько терабайт повреждена всего одна страница данных. Несмотря на то что

я очень благодарен компании Microsoft за предоставление такой возможности, мне кажется, что на практике она будет использоваться крайне редко, к тому же она может создать больше проблем, чем решить. Если в файле базы данных возникла ошибка, гораздо лучше потратить дополнительное время, выполнив полноценное воссоздание базы данных, чем пытаться по крупицам воссоздавать потерянные страницы. Исходя из вышесказанного, работа с данной функцией в книге описана не будет.

Воссоздание базы данных программным путем

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

Однако (если, конечно, план восстановления не является полным) невозможно заранее узнать, какое количество дифференцированных и транзакционных резервных копий должно быть восстановлено. Так как каждый файл резервной копии требует отдельной инструкции RESTORE, невозможно создать корректный код, не включив в него обследование базы данных msdb и создание правильной последовательности восстановления.

Инструкция RESTORE может выполнять воссоздание базы из полной, дифференцированной и транзакционной резервной копии. Ее общий синтаксис приведен ниже.

RESTORE DATABASE|LOG имя_базы_данных [файл\файловая_группа PARTIAL]

FROM устройство_резервирования WITH

FILE = номер_файла,

PASSWORD = пароль,

NORECOVERY|RECOVERY|STANDBY = имя_файла_отмены,

REPLACE,

STOPAT дата_и_время,

STOPATMARK = 1имя_метки’

STOРВЕFOREMARK = ‘имя_метки’

Для воссоздания полной или дифференциальной резервной копии используется инструкция RESTORE DATABASE; если воссоздается журнал транзакций, используется инструкция RESTORE LOG. Для воссоздания определенного файла или файловой группы добавьте ее имя сразу после имени базы данных. Если файл или файловая группа являются единственными воссоздаваемыми данными, добавьте в инструкцию параметр PARTIAL.

Набор резервных копий часто состоит из нескольких архивов. Например, состав файла резервной копии может быть таким.

1.              Полная резервная копия.

2.              Дифференцированная резервная копия.

3-6. Резервные копии журнала транзакций.

7.              Дифференцированная резервная копия.

8,              9. Резервные копии журнала транзакций.

Параметр WITH FILE позволяет задать номер восстанавливаемой резервной копии в файле или на устройстве резервирования.

Параметры RECOVERY/NORECOVERY являются жизненно важными в инструкции воссоздания. При каждом запуске SQL Server автоматически проверяется журнал транзакций. При этом откатываются все неподтвержденные транзакции и доводятся до конца все подтвержденные. Этот процесс получил название воссоздания (recovery); он является составной частью свойств АСЮ базы данных.

Таким образом, если в инструкции воссоздания указан параметр NORECOVERY, SQL Server воссоздаст журнал, не обработав при этом ни одной транзакции; если же в инструкции будет указан параметр RECOVERY, транзакции будут обработаны. В последовательности операций восстановления все инструкции, кроме последней, должны иметь параметр NORECOVERY; в последней инструкции должен быть задан параметр RECOVERY.

Принятие решения относительно использования параметров RECOVERY и NORECOVERY является одним из самых сложных моментов написания сценария, который должен подойти ко всем возможным операциям восстановления базы данных в будущем.

Если в операции воссоздания базы данных участвует резервная копия журнала транзакций, то процесс может остановиться, не достигнув конца этого журнала. Параметры STOP АТ и STOPATMARK позволяют не воссоздавать транзакции, следующие за определенным моментом времени или меткой. При использовании параметра STOPBEFOREMARK воссоздание транзакций останавливается перед началом транзакции, на которой установлена заданная метка.

Дополнительная Об особенностях транзакций в SQL Server и способах создания маркированных информация транзакций см. в главе 23.

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

– Пример резервирования и восстановления базы данных CREATE DATABASE Plan2Recover;

Получим следующий результат:

The CREATE DATABASE process

is allocating 0.63 MB on disk 1Plan2Recover1.

The CREATE DATABASE process

is allocating 0.49 MB on disk 1Plan2Recover_log1.

Продолжаем операции:

USE Plan2Recover;

CREATE TABLE T1 (

PK INT Identity PRIMARY KEY,

Name VARCHAR(15)

) ;

Go

INSERT T1 VALUES (‘Full’); go

BACKUP DATABASE Plan2Recover TO DISK = ‘e:\P2R.bak’

WITH

NAME = 1P2R_Full1,

INIT;

Получаем следующий результат:

Processed 80 pages for database 1Plan2Recover1, file 1Plan2Recover1 on file 1.

Processed 1 pages for database 1Plan2Recover1, file 1Plan2Recover_log1 on file 1.

BACKUP DATABASE successfully processed 81 pages in 0.254 seconds (2.590 MB/sec).

Продолжаем операции:

INSERT T1 VALUES (‘Log 1′); go

BACKUP Log Plan2Recover TO DISK = ‘e:\P2R.bak’

WITH

NAME = 1P2R_Log1;

Получаем следующий результат:

Processed 1 pages for database ‘Plan2Recover1, file 1Plan2Recover_log1 on file 2.

BACKUP LOG successfully processed 1 pages in 0.083 seconds (0.055 MB/sec).

Продолжаем операции:

INSERT T1 VALUES (‘Log 21); go

BACKUP Log Plan2Recover TO DISK = ‘e:\P2R.bak’

WITH

NAME = ‘P2R_Log1;

Получаем следующий результат:

Processed 1 pages for database 1Plan2Recover1, file 1Plan2Recover_log1 on file 3.

BACKUP LOG successfully processed 1 pages in 0.083 seconds (0.065 MB/sec).

Продолжаем операции:

SELECT * FROM T1;

Текущее состояние таблицы Tl:

PK Name

1            Full

2            Log 1

3            Log 2

Предположим, что в этот момент вдруг отключилось электричество и все устройства сгорели, за исключением устройства резервного копирования. Следующая операция воссоздания базы данных использует полную резервную копию и два архива журнала транзакций, которые мы только что создали. При просмотре программного кода особое внимание обратите на использование параметров RECOVERY и NORECOVERY:

– Теперь выполняем воссоздание базы данных Use Master;

RESTORE DATABASE Plan2Recover FROM DISK = ‘e:\P2R.bak’

WITH FILE = 1, NORECOVERY;

Получаем следующий результат:

Processed 8 0 pages for database 1Plan2Recover1, file 1Plan2Recover1 on file 1.

Processed 1 pages for database 1Plan2Recover’, file 1Plan2Recover_log1 on file 1.

RESTORE DATABASE successfully processed 81 pages in 0.089 seconds (7.392 MB/sec).

Продолжаем восстановление:

RESTORE LOG Plan2Recover FROM DISK = ‘e:\P2R.bak’

WITH FILE = 2, NORECOVERY;

Получаем следующий результат:

Processed 1 pages for database 1Plan2Recover1, file 1Plan2Recover_log’ on file 2.

RESTORE LOG successfully processed 1 pages in 0.009 seconds (0.512 MB/sec).

Продолжаем восстановление:

RESTORE LOG Plan2Recover FROM DISK = ‘e:\P2R.bak’

WITH FILE = 3, RECOVERY;

Получаем следующий результат:

Processed 1 pages for database ‘Plan2Recover’, file 1Plan2Recover_log’ on file 3.

RESTORE LOG successfully processed 1 pages in 0.044 seconds (0.011 MB/sec).

Теперь мы можем проверить результат операции воссоздания базы данных:

USE Plan2Recover;

SELECT * from Tl;

PK Name

1             Full

2             Log 1

3             Log 2

Как было показано в приведенном выше примере, базы данных можно воссоздать и с помощью программного кода Т-SQL, однако в данном случае использование утилиты Management Studio обеспечит более эффективную работу.

Источник: Нильсен, Пол. Microsoft SQL Server 2005. Библия пользователя. : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2008. — 1232 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии