Программа RMAN из штатной поставки Oracle часто позволяет организовать процедуры резервирования и восстановления более удобно, нежели чем при ручном выполнении операций. Ниже приводится особо отчетливый тому пример. Правда, он исходит из определенных допущений, однако ни в коей мере не отражающих функциональные «ограничения» RMAN , а сделанных лишь для простоты. Конкретно будем считать, что:
? имеется резервная копия БД, снятая программой RMAN , по состоянию ранее 10 суток назад
? требуется восстановить таблицу EMP по состоянию 10 суток назад
? на время восстановления допускается останов работы БД
? мы согласны с избыточностью копирования файлов более необходимого
? используются два активных журнальных файла (то есть две группы).
Последние три пункта взяты для упрощения примера. Упомянутая избыточность копирования файлов скрытая, так как явно мы будем копировать наоборот, существенно меньше прежнего.
Вот как теперь можно восстановить таблицу, используя синтаксис RMAN версии 9:
>RMAN NOCATALOG TARGET / RMAN> SQL 'TRUNCATE TABLE emp'; RMAN> SHUTDOWN IMMEDIATE RMAN> HOST 'mkdir c:\oracle\temp'; RMAN> HOST 'copy c:\oracle\oradata\mydb\control01.ctl c:\oracle\temp'; RMAN> HOST 'copy c:\oracle\oradata\mydb\redo01.log c:\oracle\temp'; RMAN> HOST 'copy c:\oracle\oradata\mydb\redo02.log c:\oracle\temp'; RMAN> STARTUP MOUNT RMAN> RESTORE DATABASE UNTIL TIME 'SYSDATE - 10'; RMAN> RECOVER DATABASE UNTIL TIME 'SYSDATE - 10'; RMAN> ALTER DATABASE OPEN RESETLOGS; RMAN> HOST 'exp scott/tiger TABLES=(emp)'; RMAN> SHUTDOWN IMMEDIATE RMAN> HOST 'copy c:\oracle\temp\control01.ctl c:\oracle\oradata\mydb'; RMAN> HOST 'copy c:\oracle\temp\redo01.log c:\oracle\oradata\mydb'; RMAN> HOST 'copy c:\oracle\temp\redo02.log c:\oracle\oradata\mydb'; RMAN> HOST 'rmdir /s /q c:\oracle\temp'; RMAN> STARTUP MOUNT RMAN> RESTORE DATABASE; RMAN> RECOVER DATABASE; RMAN> ALTER DATABASE OPEN; RMAN> HOST 'imp scott/tiger TABLES=(emp)'; RMAN> HOST 'del /q expdat.dmp'; RMAN> EXIT