Страницы

пятница, 3 апреля 2015 г.

RMAN глава 3

Для того чтобы начать применение RMAN в процедурах резервного копирования и восстановления базы данных требуется совсем немного времени. При инсталляции программного обеспечения Oracle, RMAN уже устанавливается автоматически, и необходимы только две вещи для начала его использования, это наличие резервируемой базы данных (целевая база данных или target database) и клиента RMAN, который осуществляет интерфейс между пользователем и процессами сервера RMAN.
Когда вы используете RMAN, вы взаимодействуете с клиентом, который интерпретирует вводимые команды, и запускает необходимые серверные процессы, исполняющие эти команды. В дополнение, кроме клиента и целевой базы данных, в RMAN есть такое понятие как репозитарий, который представляет собой записи метаданных RMAN обо всех резервных копиях и действиях по резервному копированию и восстановлению. Эту информацию RMAN использует, когда выполняет операции резервного копирования или восстановления.
По умолчанию, RMAN всегда хранит копию репозитария в контрольном файле целевой базы данных, но опционально он может использовать для этих целей и каталог восстановления (recovery catalog), который представляет собой отдельную схему в базе данных. Всякий раз, когда происходят изменения в структуре базы данных, заархивированных журнальных файлах или резервных копиях, RMAN обновляет каталог восстановления новой порцией информации из контрольного файла целевой базы данных. В отличие от контрольного файла, где старая информация может быть заменена более новой по истечении периода времени, хранение в каталоге позволяет хранить более длительную историю репозитария. К тому же, в случае утери контрольного файла, информация не о резервных копиях не пропадёт вместе с ним. В идеале, схема каталога восстановления должна находиться в базе данных, отличной от целевой базы, это позволит повысить защищённость каталога в случае сбоя. Для этой же цели, можно так же использовать всего лишь один каталог восстановления для всех имеющихся баз данных. В этом случае лучше конечно развернуть для этого отдельный экземпляр.

3-1. Запуск клиента RMAN

Клиент RMAN представляет собой исполняемый файл rman, всегда находящийся в каталоге $ORACLE_HOME/bin. Если была правильно установлена переменная $ORACLE_HOME, запустить RMAN можно из любого места, просто введя rman в командной строке:
[oracle@alfa ~]$ rman

Recovery Manager: Release 10.2.0.3.0 - Production on Thu Apr 21 13:22:05 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Учитывайте, что появление подсказки RMAN вовсе не означает, что произошло подключение клиента к целевой, вспомогательной базе данных или к каталогу восстановления. Если попытаться на данном этапе выполнить какую либо команду, то RMAN будет использовать репозитарий в nocatalog режиме. Дальнейшее подключение к каталогу восстановления в этом случае будет невозможно и придётся перезапускать клиент RMAN, чтобы в дальнейшем можно было без проблем подсоединиться к каталогу.
[oracle@alfa ~]$ rman
Recovery Manager: Release 10.2.0.3.0 - Production on Thu Apr 21 13:31:09 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
RMAN> show all;
using target database control file instead of recovery catalog
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of show command at 04/21/2011 13:31:15
RMAN-06171: not connected to target database
RMAN> connect catalog system/test@alfa.alldba.ru;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-06445: cannot connect to recovery catalog after NOCATALOG has been used
Когда работа с RMAN закончена, достаточно просто ввести команду exit для закрытия клиента RMAN:
RMAN> exit
Recovery Manager complete.
Кроме этого, можно использовать команду quit для прерывания RMAN сессии.
RMAN> quit;
Recovery Manager complete.

3-2. Ввод команд RMAN

RMAN использует в свободной форме язык команд. Каждый оператор команды RMAN начинается с зарезервированного слова, сопровождается определенными аргументами, и заканчивается точкой с запятой. Команда может располагаться как на одной строке, так и на нескольких. Например, следующая команда, расположенная в одной строке, производит резервную копию целевой базы данных:
RMAN> backup database;
Если вводится неполная команда и нажимается ENTER, RMAN всегда запросит, нужно ли продолжать ввод команды. При этом будет произведён переход на новую строку с отображением её номера. К примеру, следующая команда резервирует базу данных вместе с ее контрольным файлом:
RMAN> backup database 
2> include current
3> controlfile 
4> ;
Когда осуществляется ввод команды в таком виде, RMAN буферизует каждую строку, которая заканчивается ENTER, до тех пор, пока не встретится строка заканчивающаяся точкой с запятой. После этого RMAN выполняет введённую команду.
В RMAN имеется возможность добавлять комментарии к своим командам. Это облегчает их логический разбор в командных файлах. Началу комментария в этом случае всегда должен предшествовать знак #. Любой текст, расположенный в строке после символа #, считается комментарием и будет проигнорирован при выполнении. Например, следующий командный файл RMAN, который выполняет инкрементальную резервную копию базы данных, использует комментарии:
# this command will be run daily
backup incremental level 1
for recover of copy # uses incrementally updated backups
database;
Хотя предполагается, что резервные слова не будут использованы в качестве части аргументов команд, всё же такая возможность в RMAN есть. Для этого, достаточно в процессе ввода команды заключить подобные слова в одинарные или двойные кавычки:
RMAN> run{
2> allocate channel 'backup' device type disk;
3> }
В дальнейшем, конечно лучше отказаться от всякого использования зарезервированных слов, особенно в качестве имен каналов.

3-3. Запись вывода RMAN в текстовый файл

Служебную информацию, которую выводит RMAN на экран можно записывать в текстовый файл. Для этого достаточно выполнить команду spool с указанием имени файла журнала:
RMAN> spool log to 'backup.log';
RMAN> backup datafile 1;
RMAN> spool log off;
Spooling for log turned off
Recovery Manager10.2.0.3.0
Заботиться о предварительном наличии файла журнала не стоит. Клиент RMAN сам создаст файл, если он не существует. Если же файл с таким именем уже присутствует в каталоге, то содержимое его будет полностью заменено. Чтобы этого не случилось, можно использовать следующий синтаксис команды spool:
RMAN> spool log to 'backup.log' append;
В данном примере информация будет добавляться в конец файла журнала backup.log. Если необходимо, что бы журнализация RMAN начиналась непосредственно с начала запуска клиента RMAN, в аргумент команды запуска можно добавить ключ «log» с указанием имени файла журнала. Правда надо учитывать, что RMAN в этом случае будет интерактивным. В следующем примере RMAN выполняет командный файл commandfile1.rcv с записью вывода результатов в файл журнала backup.log:
[oracle@alfa ~]$ rman target / cmdfile commandfile1.rcv log backup.log
Файл журнала в данном примере будет перезаписываться при каждом запуске RMAN. Если в дальнейшем потребуется сохранять выходную информацию RMAN в один и тот же журнальный файл, то в командную строку запуска клиента надо добавить аргумент append:
[oracle@alfa ~]$ rman target / cmdfile commandfile2.rcv log backup.log append
Журнализация RMAN, начиная с командной строки, хотя и позволяет сохранять информацию в файл, но она не отображает эту информацию на экране. Если такое отображение всё же требуется, то для таких случаев можно использовать команду «tee» (Unix/Linux), перенаправляя на неё поток стандартного вывода RMAN:
[oracle@alfa ~]$ rman | tee backup.log
Даже если файл журнала не был заранее задан, это вовсе не означает, что нельзя увидеть сообщения производимые RMAN. Существует динамическое представление v$rman_output, в котором эти сообщения дублируются:
SQL> SELECT recid, output FROM v$rman_output
 
RECID OUTPUT
----- -----------------------------------------------------------------------
connected to target database: ORCL (DBID=1265664822)
2
3     backup datafile 1;
4
5                                                                  
6     Starting backup at 26-APR-11 
7     using target database control file instead of recovery catalog
8     allocated channel: ORA_DISK_1
9     channel ORA_DISK_1: sid=140 devtype=DISK
10    channel ORA_DISK_1: starting full datafile backupset
11    channel ORA_DISK_1: specifying datafile(s) in backupset
12    input datafile fno=00001 name=/u02/oradata/orcl/system01.dbf
13    channel ORA_DISK_1: starting piece 1 at 26-APR-11
14    channel ORA_DISK_1: finished piece 1 at 26-APR-11
15    piece 
handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_04_26/o1_mf_nnndf_TAG20110
426T121322_6vdzo2nr_.bkp tag=TAG2
16    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
17    channel ORA_DISK_1: starting full datafile backupset
18    channel ORA_DISK_1: specifying datafile(s) in backupset
19    including current control file in backupset
20    including current SPFILE in backupset
21    channel ORA_DISK_1: starting piece 1 at 26-APR-11
22    channel ORA_DISK_1: finished piece 1 at 26-APR-11
23    piece 
handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_04_26/o1_mf_ncsnf_TAG20110
426T121322_6vdzoxjl_.bkp tag=TAG2
24    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
25    Finished backup at 26-APR-11
26
27
Представление содержит всю выходную информацию производимую заданиями RMAN, начиная с начала запуска экземпляра, и может содержать в себе до 32768 строк.


3-4. Подключение к целевой базе данных

После того как клиент RMAN запущен для осуществления действий резервного копирования и восстановления необходимо подключиться к целевой базе данных. Сделать это можно с помощью команды connect одним из двух способов, и всего лишь один раз. Первый способ заключается в подключении к базе данных с проверкой подлинности операционной системой:
RMAN> connect target /;

connected to target database: ORCL (DBID=1265664822)
Второй способ использует файл паролей:
RMAN> connect target sys/test@alfa.alldba.ru;

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/test@alfa.alldba.ru;

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

3-11. Старт и остановка базы данных в RMAN

Во время выполнения задач резервного копирования и восстановления можно загружать и выгружать базу данных Oracle не выходя из клиента RMAN. Для выполнения этих действий используются аналоги команд SQL*Plus STARTUP и SHUTDOWN.

Старт базы данных

Для старта базы данных используется команда RMAN startup. Так же как и её аналог из SQL*Plus она может использоваться с различными опциями. Если опции не указываются, то команда осуществляет автоматическое монтирование и открытие базы данных:
RMAN> startup;
connected to target database (not started)
Oracle instance started
database mounted
database opened
Total System Global Area     285212672 bytes
Fixed Size                     1261372 bytes
Variable Size                268435652 bytes
Database Buffers              12582912 bytes
Redo Buffers                   2932736 bytes
Использование опций в команде STARTUP из RMAN клиента позволяет сделать процесс восстановления базы данных гибче. В следующем примере можно наблюдать, как происходит восстановление в RMAN по шагам, начиная от старта базы данных в NOMOUNT режиме и заканчивая открытием базы данных с опцией RESETLOGS:
[oracle@alfa ~]$ rman target /
Recovery Manager: Release 10.2.0.3.0 - Production on Tue Nov 8 14:59:16 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
connected to target database (not started) 
RMAN> startup nomount;
Oracle instance started
Total System Global Area     285212672 bytes
Fixed Size                     1261372 bytes
Variable Size                268435652 bytes
Database Buffers              12582912 bytes
Redo Buffers                   2932736 bytes
RMAN> restore controlfile from autobackup;
Starting restore at 08-NOV-11
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK
allocated channel: ORA_SBT_TAPE_1
channel ORA_SBT_TAPE_1: sid=155 devtype=SBT_TAPE
channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API
channel ORA_SBT_TAPE_1: looking for autobackup on day: 20111108
channel ORA_SBT_TAPE_1: looking for autobackup on day: 20111107
channel ORA_SBT_TAPE_1: looking for autobackup on day: 20111106
channel ORA_SBT_TAPE_1: looking for autobackup on day: 20111105
channel ORA_SBT_TAPE_1: looking for autobackup on day: 20111104
channel ORA_SBT_TAPE_1: looking for autobackup on day: 20111103
channel ORA_SBT_TAPE_1: looking for autobackup on day: 20111102
channel ORA_SBT_TAPE_1: no autobackup in 7 days found
recovery area destination: /u01/app/oracle/flash_recovery_area/
database name (or database unique name) used for search: ORCL
channel ORA_DISK_1: autobackup found in the recovery area
channel ORA_DISK_1: autobackup found: 
/u01/app/oracle/flash_recovery_area/ORCL/autobackup/2011_11_08/o1_mf_s_766683874_7cl91lo5
_.bkp
channel ORA_DISK_1: control file restore from autobackup complete
output filename=/u02/oradata/orcl/control01.ctl
output filename=/u02/oradata/orcl/control02.ctl
output filename=/u02/oradata/orcl/control03.ctl
Finished restore at 08-NOV-11
RMAN> alter database mount;
database mounted
released channel: ORA_DISK_1
released channel: ORA_SBT_TAPE_1
RMAN> recover database;
Starting recover at 08-NOV-11
Starting implicit crosscheck backup at 08-NOV-11
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=155 devtype=DISK
Crosschecked 3 objects
Finished implicit crosscheck backup at 08-NOV-11
Starting implicit crosscheck copy at 08-NOV-11
using channel ORA_DISK_1
Finished implicit crosscheck copy at 08-NOV-11
searching for all files in the recovery area
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: 
/u01/app/oracle/flash_recovery_area/ORCL/autobackup/2011_11_08/o1_mf_s_766683874_7cl91lo5
_.bkp
using channel ORA_DISK_1
allocated channel: ORA_SBT_TAPE_1
channel ORA_SBT_TAPE_1: sid=156 devtype=SBT_TAPE
channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API
starting media recovery
archive log thread 1 sequence 45 is already on disk as file 
/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_08_24/o1_mf_1_45_759tw74z_.arc
archive log thread 1 sequence 46 is already on disk as file 
/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_08_24/o1_mf_1_46_759tw8sj_.arc
archive log thread 1 sequence 47 is already on disk as file 
/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_08_24/o1_mf_1_47_759twjfk_.arc
archive log thread 1 sequence 48 is already on disk as file 
/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_08_24/o1_mf_1_48_759twkrz_.arc
archive log thread 1 sequence 49 is already on disk as file /u02/oradata/orcl/redo03.log
archive log 
filename=/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_08_24/o1_mf_1_45_759tw7
4z_.arc thread=1 sequence=45
archive log 
filename=/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_08_24/o1_mf_1_46_759tw8
sj_.arc thread=1 sequence=46
archive log 
filename=/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_08_24/o1_mf_1_47_759twj
fk_.arc thread=1 sequence=47
archive log 
filename=/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_08_24/o1_mf_1_48_759twk
rz_.arc thread=1 sequence=48
archive log filename=/u02/oradata/orcl/redo03.log thread=1 sequence=49
media recovery complete, elapsed time: 00:00:02
Finished recover at 08-NOV-11
RMAN> alter database open resetlogs;
database opened
Для того чтобы вышеуказанный пример получился, резервная копия, с которой происходит восстановление контрольного файла, должна быть создана с предварительно включенным параметром CONTROLFILE AUTOBACKUP:
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
old RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored
Опцию NOMOUNT команды STARTUP можно так же использовать, если серверный (или инициализационный) файл параметров потерян и требуется его восстановление из резервной копии. Следующий пример демонстрирует этот процесс по шагам.
Для начала, переименуем файл параметров, имитируя его потерю:
[oracle@alfa /]$ cd $ORACLE_HOME/dbs
[oracle@alfa dbs]$ ls spfileorcl.ora
spfileorcl.ora
[oracle@alfa dbs]$ mv spfileorcl.ora spfileorcl.old
Если сейчас попробовать стартовать экземпляр, то он запросит файл параметров:
SQL> startup;
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file 
'/u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora'
Утерянный файл параметров имеется в резервной копии RMAN, но для того чтобы восстановить его, надо запустить базу данных в NOMOUNT режиме. Поэтому, используем для старта базы данных фиктивный файл параметров.
Перед стартом обязательно устанавливаем идентификатор базы данных, так как мы не подключаемся к каталогу восстановления:
RMAN> set DBID 1265664822;
executing command: SET DBID
Стартуем экземпляр с фиктивным файлом параметров:
RMAN> startup force nomount;
startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file 
'/u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora'
starting Oracle instance without parameter file for retrival of spfile
Oracle instance started
Total System Global Area     159383552 bytes
Fixed Size                     1260648 bytes
Variable Size                 58721176 bytes
Database Buffers              96468992 bytes
Redo Buffers                   2932736 bytes
Попробуем восстановить файл параметров из резервной копии:
RMAN> restore spfile from autobackup;
Starting restore at 11-JAN-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=36 devtype=DISK
channel ORA_DISK_1: looking for autobackup on day: 20120111
channel ORA_DISK_1: looking for autobackup on day: 20120110
channel ORA_DISK_1: looking for autobackup on day: 20120109
channel ORA_DISK_1: looking for autobackup on day: 20120108
channel ORA_DISK_1: looking for autobackup on day: 20120107
channel ORA_DISK_1: looking for autobackup on day: 20120106
channel ORA_DISK_1: looking for autobackup on day: 20120105
channel ORA_DISK_1: no autobackup in 7 days found
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 01/11/2012 13:39:14
RMAN-06172: no autobackup found or specified handle is not a valid copy or piece
Восстановление закончилось неудачей. Почему? Чтобы ответить на этот вопрос, вспомним, что экземпляр базы данных запускался с фиктивным файлом параметров. В нём нет указаний на путь к директории флэш-области восстановления, которая содержит резервные копии. RMAN просто не может их найти. Значит, придётся задавать расположение флэш-области вручную. В нашем случае путь к директории флэш-области складывается из значений двух параметров db_recovery_file_dest и db_name, которые можно определить прямо в команде восстановления файла параметров:
RMAN> restore spfile from autobackup 
db_recovery_file_dest='/u01/app/oracle/flash_recovery_area' db_name='orcl';
Starting restore at 11-JAN-12
using channel ORA_DISK_1
recovery area destination: /u01/app/oracle/flash_recovery_area
database name (or database unique name) used for search: ORCL
channel ORA_DISK_1: autobackup found in the recovery area
channel ORA_DISK_1: autobackup found: 
/u01/app/oracle/flash_recovery_area/ORCL/autobackup/2012_01_10/o1_mf_s_772211704_7jrby9p9
_.bkp
channel ORA_DISK_1: SPFILE restore from autobackup complete
Finished restore at 11-JAN-12
Как видно RMAN нашел резервную копию и восстановил из неё файл параметров. Проверим наличие файла в операционной системе:
[oracle@alfa dbs]$ ls spfileorcl.ora
spfileorcl.ora
Файл параметров действительно присутствует. Теперь можно стартовать базу данных:
RMAN> startup force;
Oracle instance started
database mounted
database opened
Total System Global Area     285212672 bytes
Fixed Size                     1261372 bytes
Variable Size                268435652 bytes
Database Buffers              12582912 bytes
Redo Buffers                   2932736 bytes
Файл параметров восстановлен, и база данных открыта. Причём сделано это всё было только в клиенте RMAN.

Остановка базы данных

Для закрытия базы данных и остановки экземпляра, в клиенте RMAN можно использовать команду SHUTDOWN. Команда поддерживает в синтаксисе те же самые опции, что и её аналог в SQL*Plus. В следующем примере показано, как используя только RMAN клиент, можно остановить базу данных, стартовать её в смонтированном режиме, сделать резервную копию и открыть базу данных для использования:
RMAN> shutdown immediate;
database closed
database dismounted
Oracle instance shut down
RMAN> startup mount;
connected to target database (not started)
Oracle instance started
database mounted
Total System Global Area     285212672 bytes
Fixed Size                     1261372 bytes
Variable Size                264241348 bytes
Database Buffers              16777216 bytes
Redo Buffers                   2932736 bytes
RMAN> backup database;
Starting backup at 11-JAN-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=157 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=/u02/oradata/orcl/system01.dbf
input datafile fno=00003 name=/u02/oradata/orcl/sysaux01.dbf
input datafile fno=00002 name=/u02/oradata/orcl/undotbs01.dbf
input datafile fno=00005 name=/u02/oradata/orcl/example01.dbf
input datafile fno=00004 name=/u02/oradata/orcl/users01.dbf
channel ORA_DISK_1: starting piece 1 at 11-JAN-12
channel ORA_DISK_1: finished piece 1 at 11-JAN-12
piece 
handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_11/o1_mf_nnndf_TAG20120
111T142105_7jtw51on_.bkp tag=TAG20120111T142105 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:14
Finished backup at 11-JAN-12
Starting Control File and SPFILE Autobackup at 11-JAN-12
piece 
handle=/u01/app/oracle/flash_recovery_area/ORCL/autobackup/2012_01_11/o1_mf_s_772294711_7
jtw98ss_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 11-JAN-12 
RMAN> alter database open;
database opened
Стоит отметить, что команды STARTUP и SHUTDOWN в клиенте RMAN имеют ограничения. Так, с их помощью нельзя закрыть и стартовать экземпляр каталога восстановления. Данные команды относятся только к целевой базе данных. Поэтому, если всё же потребуется остановить или стартовать экземпляр каталога из клиента RMAN, необходимо подключиться к нему как к целевой базе данных, и только затем использовать команды STARTUP и SHUTDOWN.

3-12. Проверка синтаксиса RMAN команд

В RMAN имеется возможность проверки синтаксиса вводимых команд. Для входа в этот режим необходимо запустить клиента RMAN с аргументом командной строки checksyntax. После этого, можно проверять синтаксис команд, вводя и запуская их в оболочке клиента или подгружая файл скрипта с содержащимися в нём командами. Сами команды исполняться при этом не будут.
Следующий пример демонстрирует проверку синтаксиса единственной команды:
[oracle@alfa ~]$ rman checksyntax
Recovery Manager: Release 10.2.0.3.0 - Production on Tue Jan 24 18:33:39 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
RMAN> run {backup database;}
The command has no syntax errors
Как видно из примера, ошибок в синтаксисе этой команды не обнаружено.
Кроме проверки синтаксиса отдельных команд, в RMAN можно проверить синтаксис команд целого скрипта. Для этого надо указать файл скрипта в качестве аргумента командной строки при запуске клиента:
[oracle@alfa ~]$ rman checksyntax @backup1.rman
Recovery Manager: Release 10.2.0.3.0 - Production on Tue Jan 24 18:43:42 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
RMAN> run
2> {
3> allocate channel dev1 device type sbt;
4> set backup copies = 2;
5> backup datafiles 
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found "identifier": expecting one of: "archivelog, as, backup, 
backupset, blocks, channel, check, copy, copies, controlfilecopy, cumulative, current, 
database, datafile, datafilecopy, device, diskratio, db_recovery_file_dest, 
db_file_name_convert, duration, filesperset, for, format, full, force, incremental, keep, 
(, maxsetsize, nochecksum, noexclude, nokeep, not, proxy, pool, reuse, recovery, skip, 
spfile, setsize, tablespace, tag, to, validate"
RMAN-01008: the bad identifier was: datafiles
RMAN-01007: at line 5 column 8 file: backup1.rman
В примере мы видим, что в синтаксисе третьей команды скрипта имеется ошибка.
Использование аргумента checksyntax позволяет предотвратить появление грубых ошибок во время выполнения командного скрипта RMAN. Рекомендуется всегда использовать данную проверку, когда скрипт модифицируется.

3-13. Сокрытие паролей при подключении к RMAN

Запуск клиента RMAN часто сопровождается указанием в аргументах командной строки параметров подключения, таких как база данных, имя и пароль пользователя. В результате, в различные логи операционной системы могут попадать данные, которые содержат командную строку запуска RMAN с паролём пользователя в открытом виде. Существует два способа избежать этого. Первый – это указывать в командной строке только имя пользователя. Клиент RMAN сам запросит пароль. Вводимые символы при этом отображаться не будут:
[oracle@alfa ~]$ rman target sys@alfa.alldba.ru
Recovery Manager: Release 10.2.0.3.0 - Production on Tue Jan 24 18:50:07 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
target database Password: 
connected to target database: ORCL (DBID=1265664822)
Если же требуется выполнить командный скрипт RMAN и при этом необходимо избежать указывания пароля в командной строке, то можно поместить команду подключения CONNECT с именем и паролём пользователя в самое начало файла скрипта. При выполнении такого скрипта RMAN клиент сделает подключение, заменив в выводе имя пользователя и пароль звёздочками:
[oracle@alfa ~]$ rman @backup.rman;
Recovery Manager: Release 10.2.0.3.0 - Production on Tue Jan 24 14:04:56 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
RMAN> connect target *
2> backup database;
connected to target database: ORCL (DBID=1265664822)
Starting backup at 24-JAN-12
…
В последнем случае стоит ограничить доступ другим пользователям к файлу сценария на уровне операционной системы, так как в нём будет указаны параметры подключения в открытом виде.

3-14. Идентификация серверных сеансов RMAN

Для выполнения задач резервного копирования и восстановления, RMAN образует с целевой базой данных или каталогом восстановления сеансы. Иногда возникают случаи, когда необходимо прервать работу одного из таких сеансов. Ниже на примерах будет показано, как можно идентифицировать такие сеансы в системе, для того чтобы их в дальнейшем можно было уничтожить.

Определение колличества сеансов

Узнать количество сеансов RMAN можно с помощью следующей формулы:
Количество сеансов = C+N+2
где:
  • C – количество выделенных каналов;
  • N – число опций CONNECT, используемых в командах выделения каналов (если не определено, то равно 1);
Если используется каталог восстановления, всегда имеется, по крайней мере, два сеанса, один к каталогу восстановления, другой по умолчанию к целевой базе данных. Сеанс по умолчанию необходим для того, чтобы выполнить такие задачи, как применение архивных журналов во время процесса восстановления.

Идентификация сеансов

Если RMAN клиент запускается на сервере базы данных (unix), то для того чтобы отобразить список серверных процессов относящихся к сеансам RMAN достаточно выполнить следующую команду:
[oracle@alfa ~]$ ps -ef | grep rman
oracle    3743  2887  4 10:20 pts/1    00:00:00 rman target /
Из примера видно, что был запущен клиент RMAN c идентификатором процесса PID равным 3743. Ищем процессы имеющие идентификаторы родительского процесса PPID равным этому значению:
[oracle@alfa ~]$ ps -ef | grep 3743
oracle    3748  3743  0 10:20 ?        00:00:00 oracleorcl 
(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle    3749  3743  0 10:20 ?        00:00:00 oracleorcl 
(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
Найденные процессы и будут принадлежать сеансам запущенного клиента RMAN. По их PID можно легко найти идентификаторы (SID, SERIAL#) сеансов и уничтожить их с помощью команды ALTER SYSTEM … KILL SESSION.
Идентификатор сеанса SID так же можно встретить и в выходной информации RMAN:
RMAN> backup database;
Starting backup at 25-JAN-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=145 devtype=DISK
В этом примере мы видим, что для резервного копирования базы данных был применён канал ORA_DISK_1, который использует сеанс с идентификатором SID = 145.
Если клиент RMAN подключается к базе данных удалённо, то определить такие сеансы через команды операционной системы будет затруднительно. В этом случае придётся обращаться к системному представлению V$SESSION и идентифицировать сеансы либо по названию программы клиента, либо по терминалу. В остальном сеансы RMAN не несут никаких отличительных признаков по сравнению с другими сеансами:
SQL> SELECT sid, serial#, username, terminal FROM v$session WHERE program = 
'rman.exe'
 
SID SERIAL# USERNAME TERMINAL
--- ------- -------- --------
146 31      SYS      0500-ASU
158 57      SYS      0500-ASU
 
Выбрано: 2 строки

3-15. Удаление базы данных из клиента RMAN

Если требуется удалить базу данных, то сделать это можно с помощью утилиты SQL*Plus. Но если нет возможности в её использовании, то удаление можно провести и в RMAN клиенте.
Для удаления базы данных, надо:
  1. Запустить базу данных в смонтированном эксклюзивном режиме:
    SQL> startup restrict mount exclusive;
    ORACLE instance started.
    Total System Global Area  285212672 bytes
    Fixed Size                  1261372 bytes
    Variable Size             268435652 bytes
    Database Buffers           12582912 bytes
    Redo Buffers                2932736 bytes
    Database mounted.
    SQL> exit 
    
  2. Использовать команду DROP для удаления базы:
    RMAN> drop database;
    database name is "ORCL" and DBID is 1290912723
    
  3. RMAN потребует подтверждение на удаление. Необходимо ввести YES:
    Do you really want to drop the database (enter YES or NO)? YES
    database dropped
    
Можно использовать ключевое слово noprompt в команде DROP для предотвращения диалога запроса на удаление. Это может пригодиться в случае составления командного скрипта RMAN.
Стандартная команда DROP DATABASE удаляет только файлы данных, файлы онлайн журналов, и контрольные файлы. Но в RMAN эта команда имеет расширенный синтаксис. Используя дополнительные ключевые слова, можно с помощью этой команды дополнительно избавиться и от всех резервных копий сделанных ранее RMAN:
RMAN> drop database including backups;
database name is "ORCL" and DBID is 1301354837
Do you really want to drop all backups and the database (enter YES or NO)? YES
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK
List of Backup Pieces
BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
1       1       1   1   AVAILABLE   DISK        
/u01/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_26/o1_mf_nnndf_TAG20120126T094
438_7l1xlq7k_.bkp
2       2       1   1   AVAILABLE   DISK        
/u01/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_26/o1_mf_ncnnf_TAG20120126T094
438_7l1xnkg7_.bkp
deleted backup piece
backup piece 
handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_26/o1_mf_nnndf_TAG20120
126T094438_7l1xlq7k_.bkp recid=1 stamp=773574279
deleted backup piece
backup piece 
handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_26/o1_mf_ncnnf_TAG20120
126T094438_7l1xnkg7_.bkp recid=2 stamp=773574337
Deleted 2 objects
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK
specification does not match any archive log in the recovery catalog
database name is "ORCL" and DBID is 1301354837
database dropped

Комментариев нет:

Отправить комментарий