如题,在Oracle的维护过程中,可能会碰到数据文件误删,或者日志文件误删的情况。假如有一个持续性的备份习惯,比如一旦有新增日志文件或者数据文件就做控制文件备份,那么自然好办。
   如果我们没有及时做控制文件备份,出现数据文件丢失或者日志文件丢失,应当如何进行数据库恢复?
   个人愚见,还没有进行验证:
    1、如果丢失的原因是误删,那么是否可以用恢复软件将文件恢复出来;
    2、采用ALTER DATABASE指令,将相应的丢失的数据文件名,从日志文件中DROP;
    3、SHUTDOWN ABORT数据库,先冷备以防万一,找出所有的数据文件名、日志文件名、控制文件名,重新创建控制文件,在重启数据库。
    提出这个情况,供各位讨论,有砖只管拍!!!因为我不是大侠,可以钻石缝!!!!!
    因为是讨论帖,所以就没有散分!!!关键是分不多!!!哈哈

解决方案 »

  1.   

    没有备份的情况下,一切都是无保证的 控制文件丢失可以重建,过程比较麻烦,redo文件丢失,丢失部分数据,可以恢复不同文件丢失有不同的恢复程度和方法,都丢失了,神也救不了了
      

  2.   

    --------------------------------------------------------------------
    ----(4)被刪除system文件及一個數据文件的恢复
    ------------------------------------------------------------------------SET  NLS_LANG=AMERICAN                                        
    SET NLS_DATE_FORMAT=YYYY/mm/dd HH24:MI:SS                     
                                                                     
    1)                                                                 
    rman  target  sys/1234@s8db_test   catalog rman/5678@test        2)                                                                 
     run {                                              
    allocate channel dev1 type disk;                    
    set limit channel dev1 kbytes= 20000;               
    set limit channel dev1 maxopenfiles = 10;           
    set limit channel dev1 readrate = 20;               
    backup                                              
      incremental level 0                               
      tag  sunday_level0                                
      format '/tmp/test_rman/b_data/sunday_level0_%s_%p'
      (database);                                       
    release channel dev1;                               
    }                                3)rm /data/oradata/s8db/S8TBS.dbf
      rm /data/oradata/s8db/system01.dbf4) SQL>startup mount;5) 檢查需要恢复的文件 
      SQL>SELECT * FROM V$RECOVER_FILE;
    SQL>select name, file#, tablespace_name, status, error, recover,fuzzy    
        from v$datafile_header;6)重新連接
      rman  target  sys/1234@s8db_test   catalog rman/5678@test       run{
    allocate channel dev1 type disk;
    restore datafile '/data/oradata/s8db/system01.dbf';
    restore datafile '/data/oradata/s8db/S8TBS.dbf';
    recover datafile '/data/oradata/s8db/system01.dbf';
    recover datafile '/data/oradata/s8db/S8TBS.dbf';
    release channel dev1;
    }
                       
                       
    7)打開數据庫
      SQL>ALTER DATABASE OPEN;