以sys登录为sysdba
sqlplus /NOLOG
SQL>connect sys/用户口令as sysdba
SQL>shutdown normal
SQL>startup mount
SQL>alter database open
ERROR 位于第 1 行: 
ORA-00313: 无法打开日志组 1 (线程 1) 的成员 
ORA-00312: 联机日志 1 线程 1: 'D:\ORACLE\ORADATA\ORACLE9\REDO01.LOG' 
ORA-27041: 无法打开文件 
OSD-04002: 无法打开文件 
O/S-Error: (OS 2) 系统找不到指定的文件。 
谁能帮帮忙

解决方案 »

  1.   

      如果没有备份,进行强制性恢复   
      1、打开数据库,会遇到一个类似的错误   
      ORA-00313:   open   failed   for   members   of   log   group   1   of   thread   1   
      ORA-00312:   online   log   1   thread   1:   'D:\ORACLE\ORADATA\TEST\REDO01.LOG'   
      ORA-27041:   unable   to   open   file   
      OSD-04002:   unable   to   open   file   
      O/S-Error:   (OS   2)   系统找不到指定的文件   
        
      2、查看V$log,发现是当前日志   
      SQL>   select   group#,sequence#,archived,status   from   v$log;   
        
      GROUP#   SEQUENCE#   ARCHIVED   STATUS   
      ----------   ----------   --------   ----------------   
      1   1   NO   CURRENT   
      2   2   YES   INACTIVE   
      3   3   YES   INACTIVE   
        
      3、发现clear不成功   
      SQL>   alter   database   clear   unarchived   logfile   group   1;   
      alter   database   clear   unarchived   logfile   group   1   
      *   
      ERROR   at   line   1:   
      ORA-01624:   log   1   needed   for   crash   recovery   of   thread   1   
      ORA-00312:   online   log   1   thread   1:   'D:\ORACLE\ORADATA\TEST\REDO01.LOG'   
        
      4、把数据库down掉   
      SQL>shutdown   immediate   
        
      5、在init<sid>.ora中加入如下参数   
      _allow_resetlogs_corruption=TRUE   
        
      6、重新启动数据库,利用until   cancel恢复   
      SQL>recover   database   until   cancel;     
      Cancel   
      如果出错,不再理会,发出     
      SQL>alter   database   open   resetlogs;   
        
      7、数据库被打开后,马上执行一个full   export   
        
      8、shutdown数据库,去掉_all_resetlogs_corrupt参数     
        
      9、重建库   
        
      10、import并完成恢复   
        
      11、建议执行一下ANALYZE   TABLE   ...VALIDATE   STRUCTURE   CASCADE;   
      说明:   
      1、该恢复方法是没有办法之后的恢复方法,一般情况下建议不要采用,因为该方法可能导致数据库的不一致   
      2、该方法也丢失数据,但是丢失的数据没有上一种方法的数据多,主要是未写入数据文件的已提交或未提交数据。   
      3、建议成功后严格执行以上的7到11步,完成数据库的检查与分析   
      4、全部完成后做一次数据库的全备份   
      5、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。
    这是我在别处找到的  我想问下_all_resetlogs_corrupt参数 放在init<sid>.ora的哪个位置9 10 11 的语法 谁能给的完整点。 
     大侠们救命啊!
      

  2.   

    看来你的联机日志有问题。如果你出问题时是正常关闭的数据库。丢的这个联机日志也不是当前日志,那就可以用你查的方法clear一下。否则就做until cancel的不完全恢复。如果没备份,那就改:_all_resetlogs_corrupt参数。这个参数放在initSID.ora中任意新行都行。只是别和别的参数放一块了。
    然后startup pfile='xxxxx' 
      

  3.   

    recover database until cancel;
    alter database resetlogs;
      

  4.   

    联机日志1发生问题  重建这个联机日志就能解决问题SQL> shutdown immediate; 
      ORA-01109: 数据库未打开 
      已经卸载数据库。 
      SQL> startup mount; 
      ORACLE 例程已经启动。 
      SQL>select * from v$log; 
      GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME 
      ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------- 
       1 1 0 104857600 1 NO UNCURRENT 670680 07-12月-07 
       2 1 15 104857600 1 NO unactive 696119 07-12月-07 
       3 1 0 104857600 1 NO Unactive 650182 07-12月-07 
      已选择3行。 
      SQL>alter database clear unarchived logfile group 1; /*重建日志文件*/ 
        数据库已经更改
       SQL>shutdown; 
      已经卸载数据库。 
      ORACLE 例程已经关闭。 
      SQL>startup; 
      ORACLE 例程已经启动