我用rman进行oracle的备份与还原,主要操作如下,但是就是还原不了,大家帮看看是什么原因啊1、  零级备份表空间
Run{
backup incremental level 0 users format 'c:/testrman/ tslevel0%u_%p_%c' tablespace users;
}
2、  1级备份表空间
Run{
backup incremental level 1 users format 'c:/testrman/ tslevel1%u_%p_%c' tablespace users;
}3、  2级备份表空间
Run{
backup incremental level 2 users format 'c:/testrman/ tslevel2%u_%p_%c' tablespace users;
}4、  表空间恢复
run {
sql  "alter  tablespace  users  offline  immediate"; 
restore  tablespace  users ";
recover  tablespace  users ";
sql  "alter  tablespace  users online ";
}
我现在创建了一个表,然后在里面插入了几行数据,然后进行0级备份表空间,备份完后,我把表里的数据删除一条,然后进行表空间恢复,可是恢复过后还是没有成功,这是什么原因呢?还请各位高手指教啊!

解决方案 »

  1.   

    1,如果你是试验的话,你因该对整个数据库进行rman备份和不完全恢复,而不是简单的只备份和恢复表空间,这样才能保证数据库是一致的。
       另外,在归档模式下,归档日志也是要进行备份的,否则你的备份就是“不可还原的”。
    2,如果你只想恢复指定的表空间,你可以使用rman进行表空间时间点恢复(TSPITR),你至少要有system,undo和users
       表空间的完全备份以及相应的归档日志备份。
       你还要建立一个辅助实例用来进行tspitr。
      

  2.   

    我用DELETE删除表中的一行数据,然后恢复后,再看表里的数据还是没有删除的那一行
      

  3.   

    那就对了,recover  tablespace  users "; 这句就是按照日志进行恢复到你出问题的时候了,而你删除语句是在你出问题之前的动作,就会根据日志再做一遍,数据就没了,不知道你明白没有,如果你想让数据出来,你就需要不完全恢复了,恢复到你删除语句之前就可以了。
      

  4.   

    楼主,你执行recover  tablespace  users "; 
    你没有指定时间点,因此数据库为了保持一致,会把tablespace恢复到你当前的状态。
    因此,redolog中的操作又被执行了一次。
    你要进行不完全恢复才可以,我上面提到了。
      

  5.   

    我用不完全恢复
    run{
    sql  "alter  tablespace  users  offline  immediate";
    sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss" ';
    set until time '2009-01-06 09:00:00';
    restore tablespace users;
    recover tablespace users;
    sql  "alter  tablespace  users online ";
    }
    恢复时候出现错误
    rman-06054:media recovery requesting unknown log:thread 1 seq 60 lowscn 639098当我输入
    select * from test;语句时出现这2个错误  
    ora-00376:file 4 cannot be read at this time
    ora-01110:data file 4:'f:\oracle\product\10.1.0\oradata\users01.dbf'
      

  6.   

    RMAN-06054: media recovery requesting unknown log: thread string seq string lowscn string Cause: Media recovery is requesting a log whose existance is not recorded in the recovery catalog or controlfile.Action: If a copy of the log is available, then add it to the recovery catalog and/or controlfile via a CATALOG command and then retry the RECOVER command. If not, then a point in time recovery up to the missing log is the only alternative and database can be opened using ALTER DATABASE OPEN RESETLOGS command.
      

  7.   

    不完全恢复需要在全库的基础上进行,不能仅仅恢复单个表空间的某些文件,需要把所有数据文件的SCN都前滚到某个SCN或者时间点如果想进行单个表空间的到时间点的恢复(tablespace point-in-time recovery),需要一个辅助数据库和一个相同名字的表空间才能进行。
      

  8.   

    1,如果你是试验的话,你因该对整个数据库进行rman备份和不完全恢复,而不是简单的只备份和恢复表空间,这样才能保证数据库是一致的。 
      另外,在归档模式下,归档日志也是要进行备份的,否则你的备份就是“不可还原的”。 
    2,如果你只想恢复指定的表空间,你可以使用rman进行表空间时间点恢复(TSPITR),你至少要有system,undo和users 
      表空间的完全备份以及相应的归档日志备份。 
      你还要建立一个辅助实例用来进行tspitr。 
      

  9.   

    rman> restore  datafile 4;
    rman> recover datafile 4;
    rman> sql "alter tablespace users online";
    这样恢复一下,就可以了,就没有以下两个错误了
    ora-00376:file 4 cannot be read at this time 
    ora-01110:data file 4:'f:\oracle\product\10.1.0\oradata\users01.dbf'又有一个疑惑,为什么用
    run { 
    sql  "alter  tablespace  users  offline  immediate"; 
    restore  tablespace  users "; 
    recover  tablespace  users "; 
    sql  "alter  tablespace  users online "; 

    这个就不行呢,语句有错误吗?