Резервирование и восстановление с помощью программы RMANВладимир Пржиялковский
Содержание
ВведениеПрограмма RMAN появилась в версии 8 СУБД Oracle как единое для всех платформ средство организации резервного копирования и восстановления данных на физическом уровне. По отношению к традиционным базовым возможностям резервирования и восстановления в Oracle, у программы RMAN есть некоторые преимущества, делающие ее в некоторых ситуациях (например, при больших объемах данных) практически незаменимой. К сожалению, наличие этих преимуществ не лишает RMAN и ряда существенных недостатков: собственной системы понятий, собственного командного языка и интерфейса общения с администратором. И то, и другое, и третье выполнено в плохих традициях разработчиков Oracle - не вполне логично, запутано и непоследовательно, - что затрудняет освоение этой программы. Назначение этой статьи - помочь перешагнуть через эти недостатки ради выгод, которые можно извлечь из RMAN. Возможности RMANВозможности RMAN включают следующее:
Уровни выполнения резервного копирования/восстановления с помощью RMAN:
Основные понятия В число основных понятий RMAN входят следующие:
Синтаксис командного языка RMAN в версии 9 имеет определенные отличия от версии 8, но все основные конструкции сохранены. Кроме этого, в RMAN для версии 9 допускается целый ряд упрощений записи команд. Возможность работы с RMAN включена также в последние версии OEM без необходимости знания командного языка. В тексте ниже для лаконичности предпочтение будет отдаваться синтаксису версии 9. Кроме этого для простоты рассматривается работа без каталога RMAN. Пример копирования и восстановления базы данныхПростейший пример снятия резервной копии (холодное копирование - вся БД - работа без каталога) иллюстрируется следующей последовательностью команд (здесь команда CONNECT TARGET соединяет RMAN с СУБД версии 8): RMAN NOCATALOG В каталоге D:\ORACLE\ORADATA\TEACHER\RMAN-BACKUP появился файл RMAN_ TEACHER _02DGA6F0_1_1.BUS (реальное имя может варьироваться). Теперь можно удалить файлы с табличными пространствами и выполнить восстановление: RMAN> RUN { База восстановлена и открыта. Упрощения в версии 9В версии RMAN для версии 9 описанное выше резервирование можно было бы выполнить так: RMAN> BACKUP DATABASE FORMAT а восстановление так: RMAN> RESTORE DATABASE; Здесь подразумевается использование неявного канала по умолчанию, так что объявлять его стало необязательно. Кроме этого в версии 9 появилась команда CONFIGURE, с помощью которой (помимо прочего) можно связать с каналом направление и маску имени файлов для резервного набора: RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT В этом случае команда снятия резервной копии может выглядеть еще проще: RMAN> BACKUP DATABASE; Резервирование файлов базы данныхГорячее полное резервирование БДГорячее резервирование
Если выполнено и то, и другое, сами действия по резервированию выглядят как обычно. Пример в синтаксисе версии 9.0: RMAN> BACKUP DATABASE FORMAT Полное резервирование табличного пространстваПример в синтаксисе версии 9.0: RMAN> BACKUP TABLESPACE system, users FORMAT Полное резервирование отдельных файлов табличного пространстваПример в синтаксисе версии 9.0: RMAN> BACKUP DATAFILE 1, 2; или RMAN> BACKUP FORMAT Резервирование временного табличного пространстваЕсли временное табличное пространство локально управляемо, оно автоматически не резервируется. Восстанавливать (воссоздавать) при необходимости его придется самостоятельно. Резервирование контрольного файлаОбычное резервирование контрольного файла приходится выполнять отдельно. Пример явного резервирования в синтаксисе версии 9.0: RMAN> BACKUP CURRENT CONTROLFILE; В версии 9 можно, однако, перевести RMAN в режим, когда копии контрольного файла будут сниматься автоматически при всякой выдаче команд BACKUP или COPY: RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON; Резервирование оперативных файлов журналаОперативные (онлайновые) файлы журнала автоматически не резервируются. Для сохранения либо следует их а) копировать отдельно, либо Резервирование архивных копий журналаФайлы архивных копий журнала резервируются всегда в отдельные от прочих файлы резервного набора и в общем случае их нужно резервировать отдельной командой. Пример в синтаксисе версии 9.0: RMAN> BACKUP ARCHIVELOG ALL; Пример того, как в версии 9.0 архивные файлы можно включить в состав резервного набора БД: RMAN> BACKUP DATABASE FORMAT Резервирование изменений (неполное резервирование)Для резервирования изменений в Oracle используется традиционная многоуровневая модель с конкретным числом уровней копии 5 (от 0 до 4). Точкой отсчета для копирования изменений обязана стать снятая ранее полная копия БД уровня 0. Пример резервирования блоков, изменившихся со времени резервирования на уровнях 3, 2, 1 и 0 (разностное, "дифференциального" резервирование) в синтаксисе версии 9: RMAN> BACKUP INCREMENTAL LEVEL 3 DATABASE; Пример резервирования блоков, изменившихся со времени последнего резервирования на уровнях 2, 1 и 0 (разностно-накопительное, "кумулятивное" резервирование) с пропуском табличных пространств, закрытых для записи (синтаксис версии 9): RMAN> BACKUP INCREMENTAL LEVEL 3 CUMULATIVE DATABASE Разностно-накопительное (кумулятивное) резервирование уровня N отличается от разностного (дифференциального) тем, что резервирует изменения произошедшие после выполнения резервирования всех уровней < N, в то время как просто разностное - изменения, произошедшие после резервирования уровней <= N. Выдача справочной информацииВыполняется специальными командами LIST и REPORT, а также разновидностью команды RESTORE. Примеры приводятся ниже. Выдача подробного списка всех снятых копий: RMAN> LIST BACKUP; Выдача списка резервных наборов, содержащих табличное пространство SYSTEM: RMAN> LIST BACKUP OF TABLESPACE system; Вариант выдачи того же самого, но в обобщенном виде (версия 9): RMAN> LIST BACKUP OF TABLESPACE system SUMMARY; Выдача информации о копиях, снятых с архивов журналов: RMAN> LIST BACKUP OF ARCHIVELOG ALL; Выдача резервных копий, оказавшихся устаревшими: RMAN> REPORT OBSOLETE; Выдача файлов с данными БД, для восстановления которых потребуются архивы журналов 2-х дневной давности и более: RMAN> REPORT NEED BACKUP DAYS 2 DATABASE; Те же сведения, но только для пространства SYSTEM: RMAN> REPORT NEED BACKUP DAYS 2 TABLESPACE system; Выдача информации о том, годны ли файлы резервного набора для восстановления: RMAN> RUN {ALLOCATE CHANNEL d1 TYPE DISK; Удаление резервных копийВыполняется командой DELETE. В простейшем варианте удаление устаревших копий может выглядеть так: RMAN> DELETE OBSOLETE; Обратите внимание, что RMAN удалил ненужные файлы резервных наборов. Вам не нужно автоматизировать удаление старых файлов, как раньше! Файлы резервных наборов могут оказаться испорченными или поврежденными. Это можно отметить в справочнике (в контрольном файле или в каталоге RMAN) с помощью команды CROSSCHECK, в результате чего они будут помечены там как EXPIRED. Последующая команда DELETE EXPIRED удалит ставшие ненужными из-за этого файлы: RMAN> CROSSCHECK BACKUP; Более сложный пример удаления устаревших резервных копий: RMAN> DELETE OBSOLETE RECOVERY WINDOW OF 14 DAYS; Восстановление данных
Восстановление до момента сбоя ("последнего момента")Некоторые примеры восстановления: RMAN> RECOVER DATABASE; RMAN> RECOVER TABLESPACE users; RMAN> RECOVER DATAFILE 'd:\oracle\oradata\teacher\users01.dbf’; RMAN> RESTORE CONTROLFILE; RMAN> RUN { Восстановление пространств, закрытых на запись: RMAN> SQL "ALTER TABLESPACE lookup_data OFFLINE"; Восстановление до указанного момента в прошломБД, работающую в режиме архивирования журнала, можно восстанавливать до определенного указанного момента с помощью фраз UNTIL {TIME … / SCN … / SEQUENCE … THREAD…}. Пример: RMAN> RESTORE DATABASE; # восстановили файлы Восстановление БД (вторая и третья строчки выше) можно выполнить и в SQL*Plus: SQL > RECOVER DATABASE UNTIL CANCEL; При таком восстановлении необходимо сбросить онлайновый журнал. После этого, как и при традиционном восстановлении со сбросом журналов (RESETLOGS), необходимо снять полную копию БД, так как с этого момента восстановление с более ранних резервных копий станет невозможным из-за того, что история журнальных записей прерывается. Автоматизация задачАвтоматизировать выполнение задач с RMAN можно как внешними средствами (язык командной оболочки), так и внутренними. Внутренние средства RMAN допускают указание файла сценария при вызове этой программы, а также организацию хранимого сценария. Пусть в файле listbackup.rcm находятся строки: CONNECT TARGET / Тогда следующие два эквивалентные по результату обращения в ОС приведут ко входу в RMAN, выполнению этого сценария и выходу: RMAN CMDFILE=listback.rcm NOCATALOG RMAN @listback.rcm NOCATALOG При использовании каталога RMAN возможно к тому же использование хранимого сценария: RMAN> REPLACE SCRIPT reportobsolete { REPORT OBSOLETE; } Пример обращения в хранимому в каталоге сценарию: RMAN> RUN { EXECUTE SCRIPT reportobsolete; } |