因为服务器断电,后来启动的时候提示ORA-01033错误.
用如下语句测试:alter database open;得到以下结果.
alter database open
*ERROR 位于第一行:
ORA-00354: ?????????
ORA-00353:??????? 1175 ?? 2854097 ?? 06/26/2008 16:52:10
ORA-00312:???? 3 ?? 1:'E:\ORACLE\ORDATA\WHYST\REDO01.LOG'

解决方案 »

  1.   

    好像是REDO01.LOG有问题了,先做好备份,然后重建一个REDO01.LOG,用resetlogs选项打开数据库
      

  2.   

    首先:startup mount;
    然后执行回复,回复的时间写你出错前的时间:SQL> recover database until time '2008-06-28:10:00:00';
    完成介质恢复。
    打开数据库:
    SQL> alter database open resetlogs;数据库已更改。好了:
    SQL> conn scott/oracle
    已连接。
    SQL>这样弄好后,以前的归档日志就都不能用了,要删除!操作前后一定记得做好备份!!!!!!
      

  3.   

    操作之前备份常见的数据库不能启动的原因:
    (蓝色字体为sqlplus界面操作,红色为注释)
    一、日志文件丢失或损坏
    日志文件的恢复:
    1、非归档模式
    SQL>startup mount;
    SQL>select * from v$logfile;
    如果日志文件丢失了,手工建上相应的日志文件放在原处
    (新建一个文本文件,改为相应的日志名就可以了)

    SQL>Select * from v$log;
    查看日志文件当前状态
    SQL>alter database clear logfile group N;  
    (N为非当前状态组号,把所有非当前状态的日志进行恢复);
    (语句的作用是把该日志文件,清空为标准空日志文件)
    SQL>recover database until cancel;
    (恢复当前日志)
    SQL>alter database open resetlogs; 如果是单个日志文件损坏
    SQL>startup mount;
    SQL>alter database clear logfile group N;
    SQL>alter database open; 2、归档模式
    与上面操作大致一样如果
    如果alter database clear logfile group N 执行不成功
    就改为:alter database clear unarchived logfile group N特别要注意的:alter database open resetlogs;
    Resetlogs:
    表示一个数据库逻辑生存期结束和一个数据库逻辑生存期的开始.
       每次使用resetlogs时,SCN计数器不会被重置,oracle会重置其它计数器(如日志序列号),同时还会重置重做日志的内容. 如果当前日志文件损坏无法通过recover database until cancel恢复就用第三种方式处理。3、当前日志文件损坏的处理办法:
    SQL>startup mount;
    SQL>create pfile=’d:\orace_test\pfile.txt’  from spfile;
    (8i及以前版本直接找到参数文件复制一份就可以了)
    SQL>shutdown immediate;
    编辑生成的pfile,加入_allow_resetlogs_corruption=TRUE
    SQL>startup mount pfile=’d:\oracle_test\pfile.txt’;
    SQL>alter database open resetlogs;数据库被打开后,马上执行一个full export 
    shutdown数据库
    重建库 
    import并完成恢复 
    建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE; 
    说明: 
    1、该恢复方法是没有办法之后的恢复方法,一般情况下建议不要采用,因为该方法 
    可能导致数据库的不一致 
    2、该方法也丢失数据,未写入数据文件的已提交或未提交数据。 
    3、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为 
    任何数据的丢失对于生产来说都是不容许的
    二、密码文件的丢失与损坏
    在一些特殊情况下会改变密码文件如:重建控制文件或密码文件被修改。
    c:>orapwd  file=’home\database\PWDSID’ password=123三、控制文件丢失或损坏
    如果控制文件只丢失或损坏一个,可以复制一个替换损坏或丢失控制文件.
    如果所有控制文件损坏了就进行下面的操作。
    1、非归档模式
    1.有控制文件备份的情况下
    复制备份的控制文件,替换丢失的数据文件(用控制文件名命名)
    SQL>startup;
    SQL>recover database using backup controlfile;
     
    看到这个提示时输入相应的日志文件路径如:
    'D:\ORACLE\ORADATA\TEST9\REDO01.LOG'
    如果输入的文件有误会出现下面图片
     
    如果出现上面错误就再重复一次
    SQL> recover database using backup controlfile until cancel;
    输入正确的日志后会出现
     SQL>alter database open resetlogs; 2.没有控制文件备份的情况下
    方法1:
    原来控制文件处不能有相应的控制文件
    Sql> startup nomount;
    Sql>
    CREATE CONTROLFILE REUSE DATABASE test9 NORESETLOGS NOARCHIVELOG 
      MAXLOGFILES 64 
      MAXLOGMEMBERS 2 
    MAXDATAFILES 254 
    MAXINSTANCES 32 
      MAXLOGHISTORY 113 
      LOGFILE 
    (根据自己日志文件进行设置,把所有的日志文件添加进去)
    注意日志文件size与日志一致
      GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 , 
      GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 , 
      GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576 
      DATAFILE 
    (根据自己数据库数据文件进行设置,把所有的数据文件名添加进去)
    'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF',
    'D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF',
    'D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF',
    'D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF',
    'D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF',
    'D:\ORACLE\ORADATA\TEST9\INDX01.DBF',
    'D:\ORACLE\ORADATA\TEST9\ODM01.DBF',
    'D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF',
    'D:\ORACLE\ORADATA\TEST9\USERS01.DBF',
    'D:\ORACLE\ORADATA\TEST9\XDB01.DBF'
    CHARACTER SET ZHS16GBK  ;按回车后,如果出现‘控制文件已创建’的提示时就表示创建成功
    如果没有成功,
    (根据自己数据库的字符集进行设置)
    SQL> shutdown immediate;
    SQL>startup mount;
    SQL>recover database using backup controlfile until cancel;
     
    看到这个提示时输入相应的日志文件路径如:
    'D:\ORACLE\ORADATA\TEST9\REDO01.LOG'
    如果输入的文件有误会出现下面图片
     
    如果出现上面错误就再重复一次
    SQL> recover database using backup controlfile until cancel;
    输入正确的日志后会出现
     
    SQL>alter database open resetlogs;如果这种办法无法新建控制文件,可能用下面一种方法创建控制文件

    方法2:
    SQL>startup nomount;
    Sql>
    CREATE CONTROLFILE SET DATABASE test9 NORESETLOGS NOARCHIVELOG 
      MAXLOGFILES 64 
      MAXLOGMEMBERS 2 
    MAXDATAFILES 254 
    MAXINSTANCES 32 
      MAXLOGHISTORY 113 
      LOGFILE 
    GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 , 
      GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 , 
      GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576 
      DATAFILE 
    'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF',
    'D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF',
    'D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF',
    'D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF',
    'D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF',
    'D:\ORACLE\ORADATA\TEST9\INDX01.DBF',
    'D:\ORACLE\ORADATA\TEST9\ODM01.DBF',
    'D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF',
    'D:\ORACLE\ORADATA\TEST9\USERS01.DBF',
    'D:\ORACLE\ORADATA\TEST9\XDB01.DBF'
    CHARACTER SET ZHS16GBK  ;
     
    Sql>
    CREATE CONTROLFILE SET DATABASE test9 RESETLOGS NOARCHIVELOG 
      MAXLOGFILES 64 
      MAXLOGMEMBERS 2 
    MAXDATAFILES 254 
    MAXINSTANCES 32 
      MAXLOGHISTORY 113 
      LOGFILE 
    (根据自己日志文件进行设置,把所有的日志文件添加进去)
    注意日志文件size与日志一致
      GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 , 
      GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 , 
      GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576 
      DATAFILE 
    (根据自己数据库数据文件进行设置,把所有的数据文件名添加进去)
    'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF',
    'D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF',
    'D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF',
    'D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF',
    'D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF',
    'D:\ORACLE\ORADATA\TEST9\INDX01.DBF',
    'D:\ORACLE\ORADATA\TEST9\ODM01.DBF',
    'D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF',
    'D:\ORACLE\ORADATA\TEST9\USERS01.DBF',
    'D:\ORACLE\ORADATA\TEST9\XDB01.DBF'
    CHARACTER SET ZHS16GBK  ;
    SQL> startup mount 
    SQL> recover database using backup controlfile until cancel;
     
    SQL> alter database open resetlogs;
    2、归档模式 (操作与非归档一致)
    四、数据文件的丢失或损坏
    1、非归档模式
    1、非系统表空间数据文件损坏
    表空间唯一数据文件损坏
    SQL>startup mount;
    SQL>alter database drop tablesapce space_name
    表空间一个数据文件损坏
    SQL>startup mount;
    SQL>alter database datafile ‘filepath’ offline drop ;
    SQL>alter database open;
    2、系统表空间数据文件损坏
    临时表空间丢失或损坏
    删除损坏数据文件,再为表空间添加一个数据文件。
    回滚表空间丢失或损坏

    2、归档模式
    五、oracle软件配置环境或者是其它原因