我今天学习了一下oracle RMAN的备份恢复,就是删除数据文件和控制文件,保留日志文件的恢复。遇到一个问题。就是在操作的最后一部分,及alter database open 报错,说必须使用alter database open resetlogs打开。可是我认为应该使用alter database open 打开,不知道是什么原因。请大侠帮助。数据库处于归档模式下,做数据库联机备份,并且RMAN的参数是使用快闪恢复区作为备份文件的存储目录
,配置了控制文件自动备份。1、使数据库处于归档模式
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL> conn sys/ysyy@ahufgov as sysdba;
SQL> archive log list;
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;
SQL> archive log list;2、查看快闪恢复区参数
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL> conn sys/ysyy@ahufgov as sysdba;
SQL> show parameter db_recovery_file_dest;3、配置控制文件自动存档
C:\Documents and Settings\Administrator>rman target system/ysyy@ahufgov
RMAN> show all;
RMAN> configure controlfile autobackup on;
RMAN> show all;数据文件、控制文件丢失的恢复,日志文件保存良好。数据库联机备份
C:\Documents and Settings\Administrator>rman target rman/ysyy@ahufgov
RMAN> backup as compressed backupset database plus archivelog delete all input;备份数据库后,为了演示备份后是否有数据丢失,我们在system用户下,创建两张表,并插入数据。
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL> conn system/ysyy@ahufgov
SQL> create table testa as select * from dba_segments;
SQL> select count(*) from testa;
SQL> create table testb (id int,name varchar2(18));
SQL> insert into testb values ('1','zhangsan');
SQL> insert into testb values ('1','zhangsan');
SQL> insert into testb values ('1','zhangsan');
SQL> insert into testb values ('1','zhangsan');
SQL> insert into testb values ('1','zhangsan');
C:\Documents and Settings\Administrator>sqlplus sys/ysyy@ahufgov as sysdba;
SQL> shutdown immediate
删除D:\app\Administrator\oradata\ahufgov下所有的数据文件、控制文件,保留日志文件。C:\Documents and Settings\Administrator>rman target rman/system@ahufgov
RMAN> startup
RMAN> restore controlfile from 'D:\app\Administrator\flash_recovery_area\ahufgov\AUTOBACKUP\2013_04_23\O1_MF_S_813491555_8QCTC56T_.BKP';
RMAN> startup mount;
RMAN> restore database;
RMAN> recover database;
RMAN> sql 'alter database open resetlogs';----在这里应该使用RMAN> sql 'alter database open';
----------查看测试结果----------------
C:\Documents and Settings\Administrator>sqlplus system/ysyy@ahufgov
SQL> select count(*) from testa;  COUNT(*)
----------
      6014SQL> select count(*) from testb;  COUNT(*)
----------
         5
RMAN> sql 'alter database open resetlogs';----在这里应该使用RMAN> sql 'alter database open';
----------查看测试结果----------------

解决方案 »

  1.   

    RMAN> restore controlfile from 
    ====================================
    恢复控制文件造成的,回复后的控制文件不包含当前日志文件的信息,也就是说,日志链断了,当前的 online log ( 还有可能一部分归档日志)不可用。所以必须 resetlogs
      

  2.   

    执行了不完全恢复或者恢复控制文件,在打开数据库时必须指定RESETLOGS,这是由ORACLE的自身特性决定的。
    具体内容可以参见《涂抹Oracle__三思笔记之一步一步学Oracle》的响应章节