3-4. Подключение к целевой базе данных
После того как клиент RMAN запущен для осуществления действий резервного копирования и восстановления необходимо подключиться к целевой базе данных. Сделать это можно с помощью команды connect одним из двух способов, и всего лишь один раз. Первый способ заключается в подключении к базе данных с проверкой подлинности операционной системой:
RMAN> connect target /; connected to target database: ORCL (DBID=1265664822)
Второй способ использует файл паролей:
RMAN> connect target sys/Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.;
connected to target database: ORCL (DBID=1265664822)
Учитывайте, что во втором случае пользователь должен иметь sysdba привилегию и быть зарегистрированным в файле паролей. При этом в команде подключения не надо указывать служебное слово as sysdba, так как rman уже подразумевает, что данная привилегия у вас есть.
Вышеперечисленные способы подключения можно совместить с процессом запуска клиента rman, указав в качестве его командных параметров параметры подсоединения. Вот как это будет выглядеть в нашем случае:
[oracle@alfa ~]$ rman target /; Recovery Manager: Release 10.2.0.3.0 - Production on Tue May 10 11:28:41 2011 Copyright (c) 1982, 2005, Oracle. All rights reserved. connected to target database: ORCL (DBID=1265664822)
или
[oracle@alfa ~]$ rman target sys/Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.;
3-5. Выполнение команд операционной системы в пределах RMAN
Иногда, после запуска клиента rman, требуется выполнить какие либо команды операционной системы, не выходя при этом из оболочки самого клиента. Для решения этой проблемы, в rman имеется команда host, которая вызывает подоболочку операционной системы. Выполнить с помощью неё команды операционной системы можно двумя способами. Первый способ заключается в передаче команде host в качестве аргумента единственной команды операционной системы. Так, в следующем примере, после копирования файла users01.dbf в каталог /tmp выполняется команда ls, для просмотра факта наличия скопированного файла в операционной системе:
RMAN> backup datafile '/u02/oradata/orcl/users01.dbf' format '/tmp/users01.dbf'; Starting backup at 10-MAY-11 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset input datafile fno=00004 name=/u02/oradata/orcl/users01.dbf channel ORA_DISK_1: starting piece 1 at 10-MAY-11 channel ORA_DISK_1: finished piece 1 at 10-MAY-11 piece handle=/tmp/users01.dbf tag=TAG20110510T122817 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 10-MAY-11 RMAN> host 'ls –l /tmp/*.dbf'; -rw-r----- 1 oracle oinstall 8241152 Май 10 12:28 /tmp/users01.dbf host command complete
При данном способе, после выполнения команды операционной системы, происходит возвращение управления оболочке клиента RMAN.
Во втором способе выполнения команд подоболочка операционной системы запускается в диалоговом режиме. После выполнения каждой команды операционной системы, возвращение управления клиенту RMAN не происходит, и подоболочка будет ожидать от пользователя ввода новой команды. Завершение работы с подоболочкой и переход к приглашению RMAN, в этом случае, будет осуществляться по специальной команде exit:
RMAN> backup datafile 5 format '/tmp/example01.cpy'; Starting backup at 10-MAY-11 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset input datafile fno=00005 name=/u02/oradata/orcl/example01.dbf channel ORA_DISK_1: starting piece 1 at 10-MAY-11 channel ORA_DISK_1: finished piece 1 at 10-MAY-11 piece handle=/tmp/example01.cpy tag=TAG20110510T123117 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03 Finished backup at 10-MAY-11 RMAN> host; [oracle@alfa ~]$ ls -l /tmp/*.cpy -rw-r----- 1 oracle oinstall 59105280 Май 10 12:31 /tmp/example01.cpy [oracle@alfa ~]$ exit; exit host command complete
3-6. Скрипты RMAN
Выполнение некоторых команд RMAN может занимать довольно длительное время, и чтобы хоть как-то автоматизировать этот процесс, у RMAN имеется возможность объединять команды в скрипты. Это позволяет не дожидаться результатов окончания каждой команды, и открывает возможность выполнения команд в любое время с использованием планировщика.
Скрипты можно образовывать двумя способами. Первый способ – это создание файла скрипта командной оболочки, в котором будут исполняться команды RMAN. Преимуществом данного метода является то, что в одном скрипте можно указать как команды RMAN, так и команды командного интерпретатора, что придаёт ему большую гибкость. Ниже приведён пример такого скрипта full_backup, осуществляющего полное резервное копирование базы:
export ORACLE_SID=$1 rman target / <<- EOF sql 'alter system archive log current'; run { allocate channel d1 type disk; backup full database format '/u01/app/oracle/admin/orcl/backup/backup_%n_%T_%s_%p.bkp'; } EOF
Стоит отметить, что сочетание <<- EOF в скрипте означает, что командный интерпретатор должен читать текст файла сценария до тех пор, пока не встретиться символ EOF. Символ не обязательно должен быть таким, его вполне можно заменить и другим сочетанием.
Альтернативный способ образования скрипта заключается в создании текстового файла, в котором перечисляются команды RMAN. Например, файл скрипта созданного выше, выглядел бы в этом случае так:
sql 'alter system archive log current'; run { allocate channel d1 type disk; backup full database format '/u01/app/oracle/admin/orcl/backup/backup_%n_%T_%s_%p.bkp'; }
Запустить такой скрипт можно с помощью клиента RMAN:
[oracle@alfa ~]$ rman target / @full_backup.rman;
Символ @ с указанием имени файла скрипта означает, что RMAN должен прочитать файл до конца, и последовательно выполнить все команды указанные в нём. Это символ, кстати, можно использовать и внутри командной строки клиента RMAN, что позволяет сделать скрипт нагляднее и гибче.
3-7. Выполнение командных файлов RMAN
Как было сказано выше, для автоматизации процессов резервного копирования и восстановления, можно использовать скрипты RMAN. Запускаются такие командные скрипты с помощью клиента RMAN с указанием ключевого слова cmdfile.
[oracle@alfa ~]$ rman target / cmdfile full_backup.rman
Скрипт можно выполнить и без указания ключевого слова cmdfile, просто поместив символ @ перед именем файла:
[oracle@alfa ~]$ rman target / @full_backup.rman
При выполнении такого скрипта, происходит предварительный разбор всех команд указанных в нём. Если при этом, в синтаксисе какой-то команды, найдена ошибка, то выполнение скрипта немедленно прерывается.
Для выполнения скрипта можно использовать и оболочку RMAN. В этом случае надо указать, как и в последнем примере, символ @ перед именем файла:
RMAN> @full_backup.rman
Процесс выполнения такого файла будет отличаться от его запуска из командной строки. Каждая команда скрипта разбирается здесь непосредственно перед исполнением и возникающие ошибки не приводят к прерыванию всего командного файла.
3-8. Подключение к вспомогательной базе данных
Для осуществления дублирования базы данных или восстановления табличного пространства по времени потребуется подключение к вспомогательной базе данных. Осуществить такое подключение из клиента RMAN можно с помощью той же команды connect с указанием ключевого слова auxiliary:
RMAN> connect auxiliary sys/****@aux
Нельзя задавать подключение к основной и вспомогательной базе в одной строке. Должны быть выполнены две команды подключения.
3-9. Выполнение нескольких команд RMAN как единого блока
После того как среда RMAN настроена, и были определены команды резервного копирования, может возникнуть ситуация, когда эти команды нужно выполнить в клиенте RMAN строго последовательно. При этом, ошибка возникающая при исполнении любой команды этого последовательного набора, должна предотвратить выполнение следующих операций. То есть команды должны выступать в виде единого атомарного блока. Для оформления такого блока в RMAN есть специальный синтаксис. Начинается такой блок с ключевого слова run, далее за ним следуют фигурные скобки, внутрь которых помещаются команды:
RMAN> run { 2> allocate channel dev1 device type sbt; 3> set backup copies = 2; 4> backup datafile 4; 5> backup archivelog all; 6> }
При обнаружении закрывающей скобки блока, RMAN группирует команды блока в один или блоее шагов и начинает их выполнять немедленно.
Очень часто блок используется для того чтобы изменить какие либо параметры по умолчанию, так как при закрытии блока все параметры изменённые внутри него восстанавливаются к своим первоначальным значениям. Для этих изменений существуют специальные команды (например allocate channel или set newname for datafile), которые могут выполнятся только в пределах блока. В противоположность этому существуют команды, применение которых внутри блока запрещено, например:
connect, configure create catalog, drop catalog, upgrade catalog create script, delete script, replace script list report
3-10. Выполнение SQL команд в RMAN клиенте
При выполнении операций резервного копирования и восстановления может понадобиться исполнить некоторые SQL команды, не выходя при этом из среды RMAN. Для осуществления этих действий в RMAN существует зарезервированное слово sql, после которого в одинарных или двойных кавычках указывается текст sql команды:
RMAN> sql 'alter system archive log current'; sql statement: alter system archive log current
Не все sql команды можно полноценно выполнить таким образом. Например, команда select хотя и будет выполнена, но данные в этом случае выбраны не будут.
RMAN> sql 'select sysdate from dual'; sql statement: select sysdate from dual
Если в тексте выполняемой sql команды, требуется указать какой либо текст или, например имена файлов в одинарных кавычках, то такая команда заключается в двойные апострофы, а сам текст обрамляется удвоенными кавычками.
RMAN> sql "begin dbms_application_info.set_action(''Full backup''); end;"; sql statement: begin dbms_application_info.set_action(''Full backup''); end;
Последний пример кстати демонстрирует, что вместо sql команд в RMAN можно выполнять и PL/SQL блоки.