Шпаргалка по 70-028 | Резервирование баз данных SQL Server 7.0 | Дальше » |
Резервное
копирование
Резервирование системных баз данных Резервирование баз данных Создание и хранение резервных копий Планирование резервного копирования Вопросы для повторения Резервное копирование Для чего нужно резервное копирование, думаю объяснять не
нужно. Каждый пользователь ПК имеет горький опыт потери
информации по той или иной причине… Что бы эти потери свести к
минимуму используют резервное копирование. Главное, что бы
копии хранились отдельно от оригиналов. Относительно SQL
сервера, к необходимости восстановления из резервной копии
могут привести, как глобальные катаклизмы, так и тривиальные
ошибки пользователей/разработчиков/администраторов.
Например, кто-то может случайно или не случайно выполнить
DELETE или UPDATE , забыв указать WHERE ; а кто-то подцепит
вирус, который окажется деструктивным, а кто-то решит
позариться на вашу базу данных, или кто-то подожжет вашу
серверную комнату. Впрочем, случаются ещё и войны, наводнения
и пожары. В общем, как в песне поётся: «…следи за собой, будь
осторожен…». Резервирование системных баз данных Поскольку системные базы данных содержат жизненно важную
для функционирования сервера информацию, они подлежат
обязательному резервному копированию. Особенно это критично,
когда Вы вносите такие изменения в структуру баз сервера,
которые могут повлиять на его работу. Минимальным требованием
к резервированию системной информации является резервное
копирование системных баз до и после изменений, вносимых в
структуру его баз и системных объектов. В таком случае,
возможные фатальные последствия таких изменений могут быть
преодолены, путём восстановления предыдущего состояния из
имеющихся копий. Резервирование баз данных О необходимости разработки плана резервного копирования баз
данных, удовлетворяющего специфические требования каждого
конкретного применения, мы уже не однократно говорили в
предыдущих номерах рассылки. Однако существуют события, после
которых необходимо в обязательном порядке изготовить
«внеплановые» копии. Перечислим их: Нужно отметить, что процесс резервного копирования, как
правило, проходит не заметно для пользователей и не мешает их
работе, однако есть исключения. Приведём ниже список операций,
которые запрещено делать во время резервного
копирования: Если резервирование уже началось, то сервер просто не даст
Вам выполнить перечисленные операции. И наоборот, резервное
копирование не начнётся, когда запущена одна из таких
операций. Создание и хранение резервных копий Вы можете создавать постоянные или разовые файлы резервных копий. Наиболее распространены постоянные копии, хотя иногда бывает нужно сделать разовую копию. Постоянные файлы (устройства) резервных копий (BackUp Devises) применяются при неоднократном резервном копировании, что позволяет автоматизировать этот процесс. Создать устройства резервирования можно в SQL SEM или с помощью системной хранимой процедуры sp_addumpdevice. Резервными устройствами могут быть файлы на дисках, ленты или именованные каналы. Информация об этих устройствах записывается в системные таблицы sysdevice базы master. Каждому устройству присваивается логическое и физическое имя. Допускается иметь не более 32 устройств резервных копий. Синтаксис sp_addumpdevice следующий: sp_addumpdevice [@devtype = ]
‘ТипУстройства’, Тип устройства может быть: TAPE, DISK или PIPE, например: USE master Операцию резервного копирования можно осуществить с помощью соответствующего мастера в SQL SEM или исполнив запрос. Синтаксис оператора BACKUP (с помощью которого осуществляется непосредственно резервирование) весьма громоздкий и, поэтому, мы будем рассматривать его постепенно. В случае создания копий в постоянный или во временный файл применим следующий синтаксис этого оператора: BACKUP DATABASE {database_name | @database_name_var} Внимательно изучив многочисленные параметры, можно прийти к следующим упрощениям: 1. Для создания разовой (временной) копии, например базы NorthWind, можно использовать такую конструкцию: USE master Как видим, вместо backup_device здесь используется прямое указание на файл диска "E:". Допускается также использовать прямую ссылку местоположения файла на другом сервере. В таком случае, учётная запись, от имени которой стартует MSSQLServer должна иметь соответствующие права для доступа в выбранный каталог другого компьютера. 2. Можно существенно ускорить процесс резервного копирования, если у Вас имеется несколько однотипных устройств (приводов магнитных лент или дисков). Для этого введено понятие MEDIANAME (имя до 128 символов) описывающее резервный набор этих самых устройств. Т.е., в случае использования дисковых устройств, можно писать копию сразу в несколько файлов (параллельно - последовательно), что соответственно увеличивает скорость копирования. Резервные наборы могут содержать, как постоянные, так и временные файлы. Причём, если Вы включили файл резервной копии в такой набор, то использовать его можно только в этом наборе. Если Вы, все-таки, создадите копию в одном из файлов набора, то для дальнейшего использования набора в целом потребуется переформатировать все его файлы. Также бессмысленно форматировать только один файл набора, поскольку это нарушит целостность копий всех файлов набора. 3. Резервная копия может присоединятся к существующему устройству (по умолчанию) или затирать предыдущие копии. Т.е. может выполняться предварительная инициализация соответствующего устройства но данные заголовка файла сохраняются. Для этого используют параметр INIT или NOINIT. Правда, если первый файл резервного набора располагается на устройстве с меткой стандарта ANSI, которая запрещает перезаписывать существующие копии, то использовать параметр INIT не удастся. Ещё одним препятствием, способным помешать резервному копированию, может стать установка параметра EXPIREDATE, определяющего срок использования устройства резервирования. Также, копия не получится, если Вы попытаетесь записать копию в один из файлов существующего резервного набора. Во многих случаях, когда Вы испытываете трудности с устройствами резервного копирования, на выручку может прийти параметр FORMAT (есть ещё и NOFORMAT). С помощью его можно записать копию даже в принадлежащий резервному набору файл. В отличии от INIT, перезаписи подлежит всё, включая заголовок файла, причём, если файл входит набор, заголовок переписывается во всех файлах набора (при этом, правда, набор разбивается). Новый заголовок определяется данными из MEDIANAME и MEDIADESCRIPTION. 4. Существуют параметры, которые применимы только к лентам, как сменным устройствам. Кроме этих отличий, есть ещё и специфическое ограничение для магнитных лент: привод магнитных лент должен быть подключён локально, т.е. к тому серверу, где "крутится" SQL. Для того, что бы делать копии на ленточное устройство, подключённое к другому серверу, Вам потребуется использовать специальное ПО третьих фирм, которое будет получать данные по именованному каналу. Для отделения копий друг от друга, на ленту записываются метки, которые определяют имя базы, время создания копии, дату и тип резервного копирования (об этом позже). Начиная с версии 7.0, SQL сервер записывает информацию на ленты в стандартном для Windows NT формате, и поэтому допускается совмещение копий сервера баз данных и операционной системы на одной ленте. По умолчанию, после завершения копирования на ленту, происходит её выгрузка из привода (как при использовании параметра UNLOAD). Так будет происходить, пока Вы не примените NOUNLOAD. Другой параметр BLOCKSIZE применяется в комплекте с параметрами FORMAT, INIT или SKIP. Применяйте его, если Вас не устраивает стандартный размер блока, при копировании на ленту (например, если кроме баз данных Вы копируете обычные файлы, средний размер которых существенно меньше размера блока). При форматировании ленты нет необходимости использовать параметры INIT и SKIP, они и так выполнятся. В заголовках ленты содержатся метки ANSI, которые могут препятствовать записи копии (срок действия или права на запись). Что бы преодолеть это препятствие используют параметр SKIP. По умолчанию, действует NOSKIP, т.е. все эти заголовки читаются и учитываются. И в довершении ко всему, если Ваша копия не помещается на одну ленту, возобновить копирование на следующий том с точки прерывания можно повторным запуском BACKUP с параметром RESTART. 5. Кроме полного резервного копирования, существуют ещё схемы, позволяющие иметь актуальную копию с меньшим отвлечением ресурсов, чем автоматическое создание полной копии во временном интервале использования базы и в автоматическом режиме. Одна из таких схем – разностное резервное копирование, которое определяется параметром DIFFERENTIAL. Разностная копия создаётся на базе полной и предусматривает отписывание на устройство резервирования фрагментов базы, которые были изменены за время, прошедшее с последнего полного копирования. Для этого сравнивается Log Sequence Number (LSN) – порядковый номер записи в журнале транзакций, на каждой синхронизируемой с копией странице, с тем LSN, который был последним в предыдущей полной копии. Копирование происходит экстентами, и в копию попадают те экстенты, в которых встречаются страницы с найденным LSN большим, чем в полной копии. Копированию подлежат также все выполняющиеся в это время операции и все не завершённые транзакции. Журнал транзакций целиком не копируется. Следует отметить, что хронология обработки транзакций при таком копировании не соблюдается. Т.е., если одна запись менялась в промежутке между копированиями несколько раз, в копии отразится только последний результат. Если Вы собираетесь использовать эту схему резервного копирования, лучше выработать для себя некие правила именования файлов, содержащих разностные копии, так будет проще разобраться, где у Вас полные, а где у вас иные копии. Ещё одной схемой резервирования является отписывание в
предварительно созданную полную копию записей журнала
транзакций. Для этих целей используется оператор BACKUP LOG.
При таком подходе, в копию попадают записи журнала транзакций
от момента, когда была создана полная копия или отписывались
транзакции последний раз и до конца текущего журнала. При этом
от журнала будет отсечена неактивная его часть вплоть до
начала активного фрагмента, т.е. до того места, откуда
начинаются активные в этот момент транзакции и далее, до конца
журнала. Поскольку, после отписывания журнала в копию
происходит очистка завершённых транзакций, таким способом
можно удерживать размер журнала в разумных пределах (он не
будет "распухать" у вас до следующей полной копии). Кроме
того, соблюдается хронология выполнения операций, т.е. можно
их восстанавливать в обратном порядке, как они выполнялись, а
не последнее значение (разностная копия). 6. Если база данных храниться у Вас не в одном файле, а в некоторой группе файлов, можно эти файлы резервировать выборочно. Такой подход наиболее часто применяют для очень больших баз данных. Исходный синтаксис в таком случае будет немного расширен. Кроме имени базы данных или её номера, можно через параметр FILE или FILEGROUP задать набор конкретных логических имён файлов, которые будут копироваться. Через запятую можно указывать до 16-ти таких имён. При такой схеме копирования, лучше копировать журнал в отдельный файл. Для исключения путаницы, лучше создать расписание таких копий. Вот пример резервирования выбранного, седьмого файла: BACKUP DATABASE MyFirsDB Далее, я приведу описание некоторых ограничений, узнав о которых не каждый DBA рискнёт связываться с копированием выборочных файлов. Всё значительно усложняется, если в Вашей базе после последнего копирования появятся индексы, которые затрагивают несколько файлов или их групп. Если сервер заметит, что индекс относится к нескольким файлам, он будет требовать, чтоб весь этот набор файлов копировался, как одно целое. Проще, если индекс и таблица созданы в одной файлгруппе, тогда Вы смело можете копировать эту группу целиком. Иначе, Вам придётся копировать все файлы или группы, где индекс задействован. Причина этого в том, что при создании индекса, журналируется только сам факт создания и список используемых при его создании страниц. Когда Вы создаёте индекс, а потом наступает необходимость восстановления базы, сервер заново создаст индекс, используя список страниц. Для этого необходимо, что бы все файлы, где хранятся копии этих страниц, были в том состоянии, как на момент создания индекса. Планирование резервного копирования Если данные, содержащиеся в базах Вашего сервера не
критичны к их частичной потере в результате сбоя или аварии
сервера, или если они редко изменяются, а изменения легко
восполнимы, Вы можете использовать самый простой план
резервирования, заключающийся в периодическом, полном
резервном копировании баз данных. Можно даже ограничится
копированием только баз, исключая журнал транзакций. В таком
случае, если Вам потребуется восстановить данные из резервной
копии, Вы сможете восстановить только прошлую копию. Если при
этом, Вы не включали параметр базы trunc. Log on chkpt в TRUE
(автоматическая очистка завершённых транзакций в журнале и
усечение журнала), и журнал не пострадал, можно попытаться его
резервировать (на момент сбоя и до восстановления базы) с
параметром NO_TRUNCATE и восстановить записи журнала после
восстановления данных. В таком случае, Вам удастся обойтись
без потерь. Если же trunc. Log on chkpt был установлен в
истину, кроме прошлой копии данных у Вас не останется ничего.
Кроме того, для варианта с отключенным trunc. Log on chkpt и
если вы не резервируете и не чистите (даже в ручную) журнал,
велика вероятность того, что журнал займёт у Вас всё дисковое
пространство, после чего сервер просто откажется обслуживать
запросы клиентов, пока журнал не почистят. Т.о. Вы стоите
перед дилеммой, или смериться с возможной потерей данных или
заботится о том, что бы транзакции периодически отписывались
из журнала в резервную копию в период между полными копиями.
По моему мнению, данная схема не должна применяться ни при
каких обстоятельствах, потому, как не способна решить ни одной
практической задачи защиты данных в виду множества
уязвимостей. Единственное её применение, это задачи подготовки
и сдачи теста на MCDBA, поскольку она упоминается в
официальном курсе. Вопросы для повторения ВОПРОС | |
Шпаргалка по 70-028 | Резервирование баз данных SQL Server 7.0 | Дальше » |