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 блоки.