Восстанавливаем 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
Восстанавливаем контролфайлы из автобэкапа
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