вторник, 12 ноября 2013 г.

Восстановление из бэкапа с заменой путей

Восстанавливаем spfile из автобэкапа

  • стартуем фейковый инстанс, например ORCL, в NOMOUNT
    • sqlplus / as sysdba
    • startup nomount;
  • восстанавливаем spfile
    • rman target /
    • SET DBID = <DBID>
    • RUN {
allocate channel c2 device type disk;
SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle-backup/<dbname>/%F';
restore spfile to '/tmp/spfile.ora' from '/oracle-backup/<dbname>/c-<DBID>-20131102-00';
}
  • копируем  spfile в pfile
    • cp /tmp/spfile.ora $ORACLE_HOME/dbs/init<dbname>.ora
  • редактируем пфайл, меняем пути, удаляем бинарные строки
  • стартуем инстанс
    • export ORACLE_SID=<dbname>
    • sqlplus / as sysdba
    • startup nomount

Восстанавливаем контролфайлы из автобэкапа


  • rman target /
    • SET DBID=<DBID>;
    • RUN {
SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle-backup/<dbname>/%F';
RESTORE CONTROLFILE FROM '/oracle-backup/<dbname>/c-<DBID>-20131102-00';
}
  • монтируем базу
    • rman> alter database mount;

Подготавливаем список файлов для переименования


  • получаем список логов
    • select 'alter database rename file '''||member||''' to '''||replace(member,'+ASM_DATA','/opt/oracle/oradata')||''';' from v$logfile;
    • запускаем полученный скрипт
  • получаем список датафайлов
    • select 'set newname for datafile '||file#||' to '''||replace(name,'+ASM_DATA','/opt/oracle/oradata')||''';' from v$datafile 
  • получаем список темпфайлов
    • select 'ALTER DATABASE RENAME FILE '''||name||''' to '''||replace(name,'+ASM_DATA','/opt/oracle/oradata')||''';' from v$tempfile
    • отрабатываем замену имени темпфайла
  • подготавливаем скрипт для rman
RUN
{
allocate channel c2 device type disk;
set newname for datafile 1 to '<new_path>/system.272.770395821';
set newname for datafile 2 to '<new_path>/undotbs1.273.770395821';
set newname for datafile 3 to '<new_path>/sysaux.274.770395823';
set newname for datafile 4 to '<new_path>/users.271.770395821';
# restore the database and switch the datafile names
RESTORE DATABASE;
SWITCH DATAFILE ALL;
# recover the database
RECOVER DATABASE;
}
  • запускаем скрипт в rman 
  • alter database open resetlogs