Поиск по этому блогу

вторник, марта 24, 2009

Restore with RMAN

Помалеху готовимся к судному дню. Строим ковчег. :)
Как обычно использовал vmware, red hat, Oracle 10. Программа строит скрипт для восстановления файлов в другую папочку. Если будет другой комп, а все ради этого и затевалось, нам еще нужен файл init.ora, настроенный листенер и TNS. Може чего и забыл.
Запускаем на боевой базе в sqlplus следующий скрипт, предварительно обработав его грубым рашпилем. Делаем это до падения базы :)

set serveroutput on
set trimspool on
set line 500
set head off
set feed off
spool /home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/pfile/restore.log
declare
begin
dbms_output.put_line('run ');
dbms_output.put_line('{');
dbms_output.put_line('allocate channel c1 device type disk; ');
dbms_output.put_line('restore controlfile to ''/home/oracle/oracle/product/10.2.0/oradata/stpahom/rest.ctl'' from autobackup;');
dbms_output.put_line('release channel c1; ');
dbms_output.put_line('}');
dbms_output.put_line('alter database mount;');
dbms_output.put_line('run ');
dbms_output.put_line('{');
dbms_output.put_line(' allocate channel c1 device type disk;');
for c1 in (select name from v$datafile)
loop
dbms_output.put_line('set newname for datafile '''||c1.name||''' to '''||c1.name||''';');
end loop;
dbms_output.put_line(' restore database;');
dbms_output.put_line(' restore archivelog all;');
dbms_output.put_line('switch datafile all;');
dbms_output.put_line(' recover database;');
dbms_output.put_line(' alter database open resetlogs;');
dbms_output.put_line(' release channel c1;');
dbms_output.put_line('}');

end;
/
spool off

set head on
set feed on
set serveroutput off


У меня получилось:

run
{
allocate channel c1 device type disk;
restore controlfile to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/rest.ctl' from autobackup;
release channel c1;
}
alter database mount;
run
{
allocate channel c1 device type disk;
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/system01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/system01.dbf';
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/undotbs01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/undotbs01.dbf';
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/sysaux01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/sysaux01.dbf';
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/users01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/users01.dbf';
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/example01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/example01.dbf';
restore database;
restore archivelog all;
switch datafile all;
recover database;
alter database open resetlogs;
release channel c1;
}


Ну и наконец все это запускаем в RMAN. Где-то вот так
RMAN> $ORACLE_HOME/bin/rman target / cmdfile=/home//home/oracle/oracle/product/10.2.0/db_1/admin/pahomway/pfile/restore.log;


Грубый рашпиль никто не отменял. Например вот здесь
set newname for datafile '/home/oracle/oracle/product/10.2.0/oradata/pahomway/system01.dbf' to '/home/oracle/oracle/product/10.2.0/oradata/stpahom/system01.dbf';
Выделенное пухленьким следует менять. Так как мы хотим другую папку, а у этой команды пути одинаковые. При восстановлении БД в режиме NOMOUNT.