Базы данных Oracle - статьи

         

Технологические упрощения благодаря использованию RMAN


Программа 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


То есть мы сохранили текущие контрольный и журнальные файлы, восстановили базу на 10 суток назад, извлекли нужные данные, вернули текущие контрольный и журнальные файлы на старое место, восстановили базу «как и было» и занесли в нее старые данные таблицы.

Что последнем сценарии избыточно, а что необходимо, читатель разберется сам в порядке упражнения. Замечательно однако, что приведенный перечень действий легко оформляется файлом, то есть легко автоматизируется. Например, если приведенные команды разместить в файле restore_emp.rcm , то восстановить образ таблицы по состоянию на 10 суток назад можно, набрав в ОС:

>RMAN CMDFILE=restore_emp.rcm NOCATALOG TARGET /

Внимательный читатель заметит, что подобную автоматизацию можно организовать и без использования RMAN , работая через SQL * Plus . Верно, но RMAN все же открывает больше возможностей. Например, горячие копии, по которым мы восстанавливаемся, могут быть инкрементальными, а потому гораздо более компактными, что существенно для чисто физической возможности их более долговременного хранения.

Таким образом, потеряв данные таблицы, не стоит чрезмерно сокрушаться. Но тем не менее, несмотря на простоту восстановления, до логических потерь лучше стараться дело не доводить, благо в отличие от физических потерь, ситуация с ними, хотя бы и теоретически, подконтрольна разработчикам прикладной системы.


Содержание раздела