Шпаргалка по 70-028 | Восстановление баз данных SQL Server 7.0 | Дальше » |
Регенерация
Подготовка к восстановлению Оператор RESTORE Параметры оператора RESTORE Восстановление полной копии Восстановление разностной копии Восстановление журналов транзакций Резервный сервер Восстановление системных баз данных Вопросы для повторения Регенерация Регенерация (recovery process) является первичным
внутренним механизмом восстановления сервера баз данных,
позволяющим обеспечить согласованность данных при перезагрузке
сервера, по запросу пользователя или в следствии сбоя/аварии.
Суть этого процесса в том, что сервер, путём анализа журналов
транзакций и баз данных, определяет (естественно, после
контрольной точки) какие транзакции записаны в журнале, какие
из исполненных в действительности не были применены (тогда их
применяют), а также какие транзакции ещё не завершены и могут
быть откачены назад. При запуске SQL сервера регенерация всех
баз данных запускается автоматически. Подготовка к восстановлению При восстановлении базы все её объекты будут созданы
заново, так что если принято решение восстанавливаться из
полной копии, можно уже не волноваться за состояние и
содержание пострадавшей базы данных. Волноваться стоит о том,
что именно Вы собираетесь восстанавливать, особенно, если
копия у Вас не одна, а целый набор, за некоторый период
времени. Кроме того, полезно учесть схему резервирования и
принятые для этой схемы методы восстановления. Наиболее
информативным инструментом, а главное наглядным, является SQL
SEM. В нём можно визуально просмотреть имеющиеся наборы
резервных копий и устройств резервирования, для того, что бы
точно определить, какую из имеющихся копий базы данных (полную
или разностную), а также набор отписанных по расписанию копий
журнала транзакций нужно восстанавливать. Альтернативным
методом можно считать использование специальных операторов
T-SQL, о которых мы и поговорим ниже. Оператор RESTORE
HEADERONLY представит на Ваш суд информацию: об имени и
описании файла копии или резервного набора; тип устройства
резервирования; метод (схема) резервирования; дата и время
копирования; размер копии; порядковый номер файла копии в
цепочке копий на устройстве резервирования. Оператор RESTORE
FILELISTONLY выдаст: логические имена восстанавливаемых файлов
и журналов; физические их имена; типы этих файлов (база или
журнал); принадлежность их к группе файлов; размер резервного
набора (Мб); максимально допустимый размер файла(Мб). Оператор
RESTORE LABELONLY выдаст вам информацию о носителе копии,
содержащуюся в заголовке носителя. Оператор RESTORE VERIFYONLY
поможет проверить, цела ли Ваша копия, и можно ли её
достоверно прочитать. Оператор RESTORE RESTORE DATABASE { database_name | @database_name_var
} Где: Более подробно об устройстве резервирования: < backup_device >
::= Где: Полный синтаксис и описание характеристик оператора RESTORE можно найти в Books Online. В качестве примера, рассмотрим восстановление базы northwind, резервная копия которого была создана в постоянном файле. USE master Как видите, всё очень просто и понятно. Теперь давайте рассмотрим применение разнообразных параметров оператора RESTORE DATABASE. Поскольку мы уже говорили в предыдущем выпуске о процедуре регенерации, начнём с параметров: NORECOVERY | RECOVERY | STANDBY = undo_file_name. По умолчанию, SQL сервер всегда пытается перед восстановлением базы запустить процесс регенерации WITH RECOVERY. На практике, этот параметр нужно использовать для полной копии или для последней резервной копии журнала транзакций. Это поможет восстановить согласованность данных. Если нужно восстанавливать и другие (не последнюю) копии журнала или разностные копии, следует использовать WITH NORECOVERY. Причина в том, что SQL сервер при регенерации данных отменяет все не завершённые транзакции и применяет все завершённые транзакции, что может привести к потере согласованности данных в процессе восстановления нескольких копий журнала, выполненных в разное время после полного или разностного резервного копирования (с целью очистить журнал). Для таких копий регенерация должна быть заблокирована, а разрешить её можно только при восстановлении последней копии журнала транзакций. Особенность параметра NORECOVERY ещё и в том, что без регенерации база не становится доступной для пользователей. Поэтому, если Вы по ошибке восстановите все копии с параметром WITH NORECOVERY, Вам придётся или инициировать регенерацию или перегрузить сервер, при старте которого всегда выполняется процедура регенерации для всех баз данных. Параметры оператора RESTORE Параметр FILE используется для указания на конкретную копию
из возможного набора хранящихся на устройстве резервирования
копий. Значением его должен являться порядковый номер копии в
наборе. Восстановление полной копии Уж отмечалось, что при восстановлении полной копии все объекты базы автоматически создаются заново и в тех местах, где они располагались. Поэтому беспокоится о повреждённой базе не имеет смысла. Если будет восстанавливаться только полная копия, для восстановления согласованности данных применяют параметр RECOVERY. Если же кроме полной копии будут восстанавливаться разностные копии или копии журнала транзакций, для всех восстанавливаемых копий, кроме последней, необходимо отключить регенерацию данных параметром NORECOVERY, иначе, согласованность данных (как отмечалось в 26-м выпуске) будет нарушена. Ниже представлен пример скрипта по восстановлению полной копии базы данных Northwind из второй по счёту резервной копии устройства резервирования NorthwindBackupDevice. USE master Восстановление разностной копии Восстановление разностной копии по смыслу мало чем
отличается от восстановления полной копии. Отличие в том, что
предложение FROM указывает на файл разностной копии. Поскольку
разностная копия включает в себя все изменения, которые
произошли в базе на момент её создания с последнего
полного/разностного копирования, восстанавливать создаваемые в
этот же промежуток времени копии журнала транзакций (если
таковые имеются) нет необходимости. Преимущество этого вида
копирования/восстановления в том, что время, затраченное на
восстановление разностной копии, как правило, меньше, чем
время восстановления копий журнала транзакций за тот же
период. Порядок восстановления следующий: восстанавливаем
последнюю полную копию, потом последнюю разностную копию и
копии журнала транзакций после последнего разностного
копирования. Естественно, параметр RECOVERY должен
использоваться только для самой последней из восстанавливаемых
копий. Полную копию и все копии, которые будут
восстанавливаться между ней и последней копией (например,
журнала транзакций) нужно выполнять в режиме WITH
NORECOVERY. Восстановление журналов транзакций Восстановление журналов транзакций имеет ряд особенностей, которые стоит отметить особо. Во первых, как и в случае с восстановлением полной и разностной копии, регенерация включается только для последней, восстанавливаемой копии журнала транзакций. Для копий журнала это особенно актуально, поскольку они отписываются, как правило, значительно чаще, чем остальные копии. Кроме того, можно восстановить данные практически до момента сбоя, повлекшего порчу базы. Без отписывания копий журнала транзакций это не возможно. Полный синтаксис оператора RESTORE LOG следующий: RESTORE LOG { database_name | @database_name_var } Порядок восстановления следующий: вначале, восстанавливается полная копия и все последующие разностные (если таковые выполнялись), причём с включённым параметром WITH NORECOVERY; затем, по порядку, восстанавливаются копии журнала транзакций после последнего полного/разностного копирования, также с параметром WITH NORECOVERY. Регенерация применяется только к самой последней копии журнала транзакций. Если необходимо восстановить изменения базы до определённого времени, используется параметр STOPAT, время в котором устанавливается с точностью до минуты. Это ограничение не позволит восстановиться транзакциям, зарегистрированном в журнале после указанного для параметра STOPAT времени. Этот замечательный параметр нельзя использовать в сочетании с STANDBY или NORECOVERY. Согласованность данных будет восстановлена при восстановлении последнего журнала транзакций с параметром WITH RECOVERY. В прелагаемом ниже примере будет восстановлена полная копия и две копии журнала, причём копия второго журнала будет восстановлена до момента, на одну минуту опережающего событие краха базы данных, повлекшего за собой необходимость восстановления данных. База данных, как всегда, Northwind: USE master Далее, восстанавливаем первый журнал (копии журнала отписывается в другой файл, хотя, можно и в NorthwindBackupDevice: USE master Восстанавливаем второй файл. Сбой наступил в 0:01АМ, поэтому восстанавливаем на 0:00АМ. Заодно, делаем регенерацию, для согласованности данных: USE master Для особо крупных баз данных, которые в простолюдье именуют VLDB (Very Large Database), может быть применена схема копирования отдельных файлов или групп файлов. Причиной восстановления файла может стать его повреждение или случайное удаление. Кроме восстановления непосредственно самого файла, нужно будет применить копии всех журналов транзакций, которые были после этого выполнены. Причём, SQL сервер применит только те транзакции, которые относятся к восстанавливаемому файлу или группе файлов. Если Вы собираетесь восстановить один файл, а часть таблицы из этого файла или её индексы размещаются в другом файле, Вам потребуется восстанавливать оба файла. Регенерация, как и во всех уже описанных случаях, выполняется при восстановлении последней копии, если их несколько или после копирования файла были выполнены копии журнала. Это позволит применить все завершённые транзакции, записи о которых сохранились в журнале транзакций, но сами они небыли ещё отражены в базе, а также будут отменены все не завершённые, но зарегистрированные в журнале транзакции. Перечисленные условия являются непременным условием согласованности данных после восстановления из резервной копии. В представленном ниже примере, база данных Northwind разбита на три файла, второй из которых был случайно удалён в новогоднюю ночь. После последнего резервного копирования файла NorthwindFile2 была выполнена одна копия журнала транзакций в NorthwindLogBackupDevice. Процедура восстановления тогда будет иметь следующий вид: USE master Поскольку существует ещё и копия журнала, восстанавливаем и её, а также делаем регенерацию: USE master Резервный сервер Оператор RESTORE имеет ещё одно применение, отличное от задачи восстановления данных. Это перенос данных в специально сознанный для этого резервный сервер. Резервный сервер представляет собой специально выделенный для этих целей компьютер с установленным на нём SQL сервером, базы данных которого могут быть быстро приведены к точной копии основного сервера. Основное назначение такого сервера, это замена основного для снижения времени простоя. Однако возможно и другое его применение, способное снизить нагрузку на основной сервер. Если базы данных резервного сервера сделать доступными для чтения пользователей, то, таким образом, Вы сможете переключить нагрузку с основного на резервный сервер для приложений, которым не нужно вносить изменения в данные (например, для задач принятия решений). Также, наличие резервного сервера может облегчить DBA некоторые сервисные и профилактические функции, за счёт того, что их можно будет выполнять на резервном сервере или быстро переключить туда пользователей с основного, что бы провести необходимые работы. Например, таким образом можно производить разнообразные проверки данных утилитой DBCC (Database Consistency Checker), в целях выявления ошибок в их структуре или повреждений. Как правило, такие проверки занимают очень много времени и значительно увеличивают нагрузку на сервер, что мешает работать пользователям. С помощью резервного сервера выполнять проверку баз данных, а также проверку резервных копий после каждого их восстановления очень удобно. Процесс создания резервного сервера не является сложной процедурой. Для этого Вы должны иметь необходимые актуальные копии системных и пользовательских баз данных и их журналов транзакций, которые потом восстанавливаются на резервный сервер. Т.к. местоположение баз меняется, в качестве одного из параметров оператора RESTORE нужно будет использовать MOVE…TO. Восстановление на резервный сервер происходит в режиме NORECOVERY или STANDBY. Регенерация данных не должна выполняться до тех пор, пока не возникнет необходимость замены основного сервера резервным. Если Вы выполнили регенерацию данных на резервном сервере, это позволит пользователям к нему подключаться, но не позволит Вам восстанавливать на нём следующие копии журнала транзакций. Если же резервный сервер будет использоваться в режиме доступа только для чтения, выполнять регенерацию нет необходимости. Для обеспечения такого режима используют параметр STANDBY, который позволяет пользователям читать данные с резервного сервера, а также, восстанавливать на нём следующие копии журнала транзакций. При этом параметр базы данных dbo use only должен быть установлен в FALSE. Доступ к серверу в режиме чтения будет возможен только в промежутках между восстановлением резервных копий баз и журналов. При использовании оператора STANDBY создаётся файл отмены с расширением ldf, аналог журнала транзакций. В нём хранятся изменения, отменяемые при восстановлении следующих копий журнала. Если файл отмены не существует, он будет создан автоматически. В аргументе оператора STANDBY можно задавать один и тот же файл. Тогда сервер будет перезаписывать содержимое этого файла, при условии, что в существующем нет информации для отмены изменений в базе данных. Размер файла отмены изменяется автоматически и ограничен только объёмом свободного дискового пространства. Ещё одним замечательным свойством оператора STANDBY является то, что с его помощью можно определить момент возникновения сбоя, приведшего к повреждению базы или согласованности данных. Поскольку восстановление резервных копий с этим параметром делает базу данных доступной для доступа, можно запускать диагностические утилиты или запросы, с помощью которых определять наличие недопустимых данных. Процедура поиска момента сбоя сводится к следующему: Вы восстанавливаете резервную копию базы и начинаете поочерёдно восстанавливать копии журнала транзакций. После восстановления каждой копии журнала выполняется утилита DBCC или запускается скрипт, проверяющий корректность данных. На каком - то этапе Вы зафиксируете с помощью используемых диагностических средств наличие сбоя. После этого, Вы будете точно знать, что Вам нужно восстановить из резервных копий (а именно, набор копий базы и журнала) до того момента, когда произошёл сбой. Восстановив не содержащие деструктивные или не правильные действия копии, Вы сможете привести Вашу базу данных к тому состоянию, которое было до момента сбоя. Рассмотрим пример использования оператора STANDBY для резервного сервера базы Northwind. Нам необходимо обеспечить доступ пользователей для чтения базы данных на резервном сервере. Имена файлов базы на обоих серверах одинаковы: USE master RESTORE LOG Northwind FROM NorthwindLogBackupDevice Выполнение резервных копий основного сервера должно выполняться на регулярной основе и с той периодичностью, которая необходима для поддержания актуальности данных резервного сервера. После каждого копирования журнала транзакций эта копия должна восстанавливаться на резервный сервер. Использование параметра NORECOVERY позволяет сделать резервный сервер недоступным пользователям до момента замены им основного, когда будет выполнена регенерация баз данных. Поддержание базы данных резервного сервера в актуальном состояние для меня представляется в виде следующей процедуры: Вначале, определив стратегию резервного копирования, Вы заводите расписание заданий на создание необходимых полных/разностных резервных копий и копий журнала транзакций. Запросы, содержащиеся в расписании заданий, можно дополнить заданием на восстановление только что резервированной базы или журнала на резервном сервер. Для передачи задания резервному серверу на восстановление только что сделанной копии можно использовать системные хранимые процедуры, обслуживающие MS Mail, описание которых было изложено в 18-м выпуске рассылки. Для того, что бы заменить основной сервер резервным, необходимо кроме уже имеющихся резервных копий выполнить копирование журнала с параметров NO_TRUNCATE. После этого можно отключать основной сервер, переименовать резервный и восстановить на нём последние копии. Самую последнюю копию восстанавливают с параметром RECOVERY. С этого момента сервер готов к работе. Обратный процесс требует несколько больше времени. Вы должны сделать полную копию на резервном сервере и копию журнала, а потом отключить его. Эти копии восстанавливаются на основном сервере, после чего он активизируется. Далее, на основном сервере опять выполняется резервное копирование, копии восстанавливаются на резервный сервер, так, как это было описано выше. Восстановление системных баз данных Необходимость восстановления системных баз данных может быть вызвана их повреждением или повреждением носителей, где они располагаются. Существует два пути их восстановления, это восстановление с актуальной резервной копии (если сервер удаётся запустить) или перестройка этих баз с помощью запуска из командной строки утилиты rebuildm.exe, находящейся в каталоге BINN. Перестроенные базы будут записаны поверх существующих. Если сохранились их копии, то, после перестройки, можно восстановить копии системных баз данных (в случае, если сервер не запускался). Если у вас нет резервной копии базы данных master, необходимо заполнить её вручную, используя MS SQL SEM или, если таковые имеются, исходные сценарии заведения пользователей, создания файлов баз и журналов, устройств резервирования, а также учётных записей подключения и глобальных серверных ролей. После восстановления master Вы можете приступить к восстановлению базы msdb. Если вы использовали вариант с перестройкой системных баз, содержимое базы msdb будет утеряно и Вам потребуется (ели нет резервной копии) восстанавливать все расписания вручную. Если Вам удалось восстановить базу master, то для обеспечения доступа к пользовательским базам больше ничего не требуется. Если master была восстановлена путём её перестройки, Вы можете подключить к ней пользовательские базы путём восстановления из резервной копии или присоединения с помощью системных хранимых процедур sp_attach_db и sp_attach_single_file_db. Этот вариант хорош тем, что не требует наличия резервных копий баз данных и не нужно тратить время на их восстановление. Вот пример присоединения к базе master базы Northwind USE master Вопросы для повторения ВОПРОС | |
Шпаргалка по 70-028 | Восстановление баз данных SQL Server 7.0 | Дальше » |