ORACLE 9 数据库redo日志被全部删除了,如何能够重新把数据库启动起来?急!急!急!在线等待……应该有办法吧?数据库是正常关闭的,这些redo日志没有什么用,不用恢复什么数据。因为清理磁盘空间,被rm -r *.log把所有目录下找出的*.log,包括redo01.log文件页删除了,现在正么样也起不来。谢谢各位大虾!

解决方案 »

  1.   

    5.1 损坏联机日志的恢复方法
    5.1.1 损坏非当前联机日志
    大家都清楚,联机日志分为当前联机日志和非当前联机日志,非当前联机日志的损坏是比较简单的,一般通过clear命令就可以解决问题。
    1、启动数据库,遇到ORA-00312 or ORA-00313错误,如
    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'
    从这里我们知道日志组1的数据文件损坏了
    从报警文件可以看到更详细的信息
    2、查看V$log视图
    SQL> select group#,sequence#,archived,status from v$log;GROUP# SEQUENCE# ARCHIVED STATUS
    ---------- ---------- -------- ----------------
    1 1 YES INACTIVE
    2 2 YES INACTIVE
    3 3 NO CURRENT
    可以知道,该组是非当前状态,而且已经归档。
    3、用CLEAR命令重建该日志文件
    SQL>alter database clear logfile group 1;
    如果是该日志组还没有归档,则需要用
    SQL>alter database clear unarchived logfile group 1;
    4、打开数据库,重新备份数据库
    SQL>alter database open;
    说明:
    1、如果损坏的是非当前的联机日志文件,一般只需要clear就可以重建该日志文件,但是如果该数据库处于归档状态但该日志还没有归档,就需要强行clear。
    2、建议clear,特别是强行clear后作一次数据库的全备份。
    3、此方法适用于归档与非归档数据库5.1.2 损坏当前联机日志
    归档模式下当前日志的损坏有两种情况,
    一、是数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,当前日志组的损坏就可以直接用alter database clear unarchived logfile group n来重建。
    二、是日志组中有活动的事务,数据库需要媒体恢复,日志组需要用来同步,有两种补救办法
    A. 最好的办法就是通过不完全恢复,可以保证数据库的一致性,但是这种办法要求在归档方式下,并且有可用的备份
    B. 通过强制性恢复,但是可能导致数据库不一致。
    下面分别用来说明这两种恢复方法
    5.1.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 INACTIVE3、发现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、拷贝有效的数据库的全备份,并不完全恢复数据库
    可以采用获取最近的SCN的办法用until scn恢复或用until cnacel恢复
    recover database until cancel
    先选择auto,尽量恢复可以利用的归档日志,然后重新
    recover database until cancel
    这次输入cancel,完成不完全恢复,也就是说恢复两次。
    如:
    SQL> recover database until cancel;
    Auto
    ……
    SQL> recover database until cancel;
    Cancel;
    5、利用alter database open resetlogs打开数据库
    说明:
    1、这种办法恢复的数据库是一致的不完全恢复,会丢失当前联机日志中的事务数据
    2、这种方法适合于归档数据库并且有可用的数据库全备份。
    3、恢复成功之后,记得再做一次数据库的全备份。
    4、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。5.1.2.2 如果没有备份,进行强制性恢复
    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 INACTIVE3、发现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 immediate5、在init<sid>.ora中加入如下参数
    _allow_resetlogs_corruption=TRUE6、重新启动数据库,利用until cancel恢复
    SQL>recover database until cancel; 
    Cancel
    如果出错,不再理会,发出 
    SQL>alter database open resetlogs;7、数据库被打开后,马上执行一个full export8、shutdown数据库,去掉_all_resetlogs_corrupt参数 9、重建库10、import并完成恢复11、建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;
    说明:
    1、该恢复方法是没有办法之后的恢复方法,一般情况下建议不要采用,因为该方法可能导致数据库的不一致
    2、该方法也丢失数据,但是丢失的数据没有上一种方法的数据多,主要是未写入数据文件的已提交或未提交数据。
    3、建议成功后严格执行以上的7到11步,完成数据库的检查与分析
    4、全部完成后做一次数据库的全备份
    5、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。
      

  2.   

    你通过重建控制文件,resetlog打开即可~
    这个速度快!不用恢复备份~
    (仅仅适用于数据库关闭丢失控制文件/日志文件情况,如果出现数据文件损坏,则需要不完全恢复)
    方法:(模拟前先对你的数据库进行冷备份)
    1、关闭数据库删除所有online redo log file;
    2、启动数据库报日志错误:
    SQL> startup
    ORACLE 例程已经启动。Total System Global Area  135338868 bytes                                       
    Fixed Size                   453492 bytes                                       
    Variable Size             109051904 bytes                                       
    Database Buffers           25165824 bytes                                       
    Redo Buffers                 667648 bytes                                       
    数据库装载完毕。
    ORA-00313: 无法打开日志组 1 (线程 1) 的成员
    ORA-00312: 联机日志 1 线程 1: 'D:\ORACLE\ORADATA\ORA9I\REDO01.LOG' 3、生成控制文件创建语句在\admin\udump\*.trc
    SQL> alter database backup controlfile to trace;数据库已更改。SQL> shutdown
    ORA-01109: 数据库未打开 
    已经卸载数据库。
    ORACLE 例程已经关闭。
    4、创建控制文件:
    SQL> startup nomount
    ORACLE 例程已经启动。Total System Global Area  135338868 bytes                                       
    Fixed Size                   453492 bytes                                       
    Variable Size             109051904 bytes                                       
    Database Buffers           25165824 bytes                                       
    Redo Buffers                 667648 bytes                                       
    5、执行创建控制文件语句,注意要写成reseglogs
    SQL> CREATE CONTROLFILE REUSE DATABASE "ORA9I" RESETLOGS  NOARCHIVELOG
      2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
      3      MAXLOGFILES 50
      4      MAXLOGMEMBERS 5
      5      MAXDATAFILES 100
      6      MAXINSTANCES 1
      7      MAXLOGHISTORY 226
      8  LOGFILE
      9    GROUP 1 'D:\ORACLE\ORADATA\ORA9I\REDO01.LOG'  SIZE 100M,
     10    GROUP 2 'D:\ORACLE\ORADATA\ORA9I\REDO02.LOG'  SIZE 100M,
     11    GROUP 3 'D:\ORACLE\ORADATA\ORA9I\REDO03.LOG'  SIZE 100M
     12  -- STANDBY LOGFILE
     13  DATAFILE
     14    'D:\ORACLE\ORADATA\ORA9I\SYSTEM01.DBF',
     15    'D:\ORACLE\ORADATA\ORA9I\UNDOTBS01.DBF',
     16    'D:\ORACLE\ORADATA\ORA9I\CWMLITE01.DBF',
     17    'D:\ORACLE\ORADATA\ORA9I\DRSYS01.DBF',
     18    'D:\ORACLE\ORADATA\ORA9I\EXAMPLE01.DBF',
     19    'D:\ORACLE\ORADATA\ORA9I\INDX01.DBF',
     20    'D:\ORACLE\ORADATA\ORA9I\ODM01.DBF',
     21    'D:\ORACLE\ORADATA\ORA9I\TOOLS01.DBF',
     22    'D:\ORACLE\ORADATA\ORA9I\USERS01.DBF',
     23    'D:\ORACLE\ORADATA\ORA9I\XDB01.DBF',
     24    'D:\ORACLE\ORADATA\ORA9I\USER02.ORA'
     25  CHARACTER SET ZHS16GBK
     26  ;控制文件已创建6、打开数据库:
    SQL> alter database open;
    alter database open
    *
    ERROR 位于第 1 行: 
    ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ?? 
    SQL> alter database open resetlogs;数据库已更改。SQL> spool off;
    6、立即对数据库进行一次全备!
      

  3.   

    我也出现楼主的问题了,误删除了redo*.log文件,我用的是oracle8,现在采用上面的方法都不行啊:
    $ sqlplus internal;SQL*Plus: Release 8.1.7.0.0 - Production on 星期四 1月 27 11:30:47 2005(c) Copyright 2000 Oracle Corporation.  All rights reserved.已连接到空闲例程。SQL> startup mount;
    ORACLE 例程已经启动。Total System Global Area  281911456 bytes
    Fixed Size                    73888 bytes
    Variable Size             182517760 bytes
    Database Buffers           99139584 bytes
    Redo Buffers                 180224 bytes
    数据库装载完毕。SQL> alter database clear unarchived logfile group 3;
    alter database clear unarchived logfile group 3
    *
    ERROR 位于第 1 行:
    ORA-01624: ??3?????????1
    ORA-00312: ???? 3 ?? 1: '/export/oracle/oradata/ss010100/redo03.log'
    SQL> alter database clear unarchived logfile group 3;
    alter database clear unarchived logfile group 3
    *
    ERROR 位于第 1 行:
    ORA-01624: ??3?????????1
    ORA-00312: ???? 3 ?? 1: '/export/oracle/oradata/ss010100/redo03.log'
    SQL> alter database clear unarchived logfile group 3;
    alter database clear unarchived logfile group 3
    *
    ERROR 位于第 1 行:
    ORA-01624: ??3?????????1
    ORA-00312: ???? 3 ?? 1: '/export/oracle/oradata/ss010100/redo03.log'
    SQL> recover database until cancel
    ORA-00279: ?? 5199126 (? 01/27/2005 11:24:41 ??) ???? 1 ????
    ORA-00289: ??: /export/oracle/dbs/arch1_1.dbf
    ORA-00280: ?? 5199126 ???? 1 ???? # 1 ???
    指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
    /export/oracle/oradata/ss010100/redo03.log
    已应用的日志。
    完成介质恢复。
    SQL> alter database open resetlogs;
    alter database open resetlogs
    *
    ERROR 位于第 1 行:
    ORA-00704: ????????
    ORA-00704: ????????
    ORA-00600: ??????????: [4000], [7], [], [], [], [], [], []
    SQL> alter database open resetlogs
      2  ;
    alter database open resetlogs
    *
    ERROR 位于第 1 行:
    ORA-01139: RESETLOGS ???????????????
    SQL>  alter database open;
     alter database open
    *
    ERROR 位于第 1 行:
    ORA-00600: ??????????: [3668], [1], [2], [17958], [17958], [4], [], []
      

  4.   

    1、先把oracle整个目录栲出来备份。  
    2、重新安装系统,重装数据库(一定要按以前相同的方式建)  
    3、把oracle备份覆盖新装的这个。
      

  5.   

    http://www.itpub.net/showthread.php?threadid=126320
    请查看!