полное восстановление базы из архива RMAN
1. ищем pfile, поднимаем базу в nomount
2. запускаем rman
rman target / nocatalog
3. восстанавливаем controlfile из автобэкапа
restore controlfile from '/u01/backup/rman_pooh/control_c-1989669565-20121123-00';
желательно, чтобы controlfile был восстановлен из архива, сделанного уже после бэкапа,
из которого будем восстанавливаться. Иначе в controlfile будет отсутствовать информация
о нужном бэкапе и придется этот бэкап регистрировать вручную.
Чтобы сделать свежую копию контролфайла:
backup as copy current controlfile format ‘c:\bkp_controlfile.ctl’;
4. делаем так, чтобы последний полный бэкап находился по тому же пути, куда он сохранялся
5. монтируем базу
alter database mount;
6. восстанавливаем файлы базы
restore database;
если нужно пропустить часть табличных пространств, то пишем
restore database skip tablespace tbs_1, tbs_2 ...;
для ускорения процесса можно выделить несколько каналов на диск:
rman target / nocatalog <<EOF
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
restore database skip tablespace tbs_blabla;
release channel c1;
release channel c2;
release channel c3;
}
exit;
EOF
7. убеждаемся, что архивлоги за период бэкапирования базы находятся на своем месте
(show parameter log_archive_dest_1)
и запускаем
recover database;
можно делать восстановление из SQLPLUS, в этом случае набираем:
recover database using backup controlfile until cancel;
здесь важно, чтобы именно было until cancel, так как иначе будет ошибка
при открытии, что файл 1 требует дальнейшего восстановления.
Если были пропущены табличные пространства
то запускать нужно
recover database skip tablespace tbs_1, tbs_2 ...;
но при восстановлении бэкапа, сделанного на стэндбае, может получиться ошибка, так как RMAN дает команду удаления файла для пропущенного табличного пространства без опции "DROP".
В случае подобной ошибке идем в sqlplus и удаляем все пропущенные файлы руками:
ALTER DATABASE DATAFILE ‘<datafile name with complete path>’ OFFLINE DROP;
Потом набираем:
ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
эта команда выполняет recover из архивлогов. Наблюдать за ходом выполнения можно через alert.log.
Если необходимо восстановление на определенный момент времени, то устанавливаем переменные окружения
oracle> export NLS_LANG=american_america.us7ascii
oracle> export NLS_DATE_FORMAT="Mon DD YYYY HH24:MI:SS"
Затем даем команду recover:
RECOVER standby DATABASE using backup controlfile UNTIL TIME 'Nov 01 2014 03:00:00';
8. подкладываем по необходимости нужные архивлоги и когда они заканчиваются
или когда достигаем нужной точки восстановления,
говорим
alter database open resetlogs;
посмотреть текущие значения SCN в открытой базе:
select current_scn, checkpoint_change#, controlfile_change# from V$database;
В случае, когда бэкап делали со standby, база может и не открыться с ошибкой "файл system.dbf восстановлен из недостаточно ранней копии".
Тогда помогает пересоздать controlfile:
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/opt/app/oracle/admin/ORA102/control.trc';
И затем create database ... resetlogs force
|