天天看点

解决ORA_600[2662]和[4194]错误办法

描述:因为是初学oralce 特意制作出故障进行恢复的,生产环境也可以借鉴,也算是为了自己的学习做复习,本实验都是亲自实验过的。

环境:

     服务器:CentOS release 4.4 (Final)

     数据库:Database 10g Release 10.2.0.1.0

实验目的: 解决ORA_600[2662]和ORA_600[4194]

错误产生:

删除所有控制文件和日志文件

rm -rf /u01/app/oracle/oradata/orcl/control01.ctl

rm -rf /u01/app/oracle/oradata/orcl/control02.ctl

rm -rf /u01/app/oracle/oradata/orcl/redo01.log

rm -rf /u01/app/oracle/oradata/orcl/redo02.log

rm -rf /u01/app/oracle/oradata/orcl/redo03.log

rm -rf /u01/app/oracle/oradata/orcl/redo04.log

        模拟断电

shutdown abort

启动时出现报错,查看警报日志显示ORA_600[2662]

vim /u01/app/oracle/admin/orcl/bdump/alert_orcl.log

解决办法:

1 启动到nomount状态

       startup  nomount

2 修改隐藏参数(这个隐藏参数的功能大致知道是忽略一些错误,但是具体原理的我也不清楚)

      alter system set "_allow_error_simulation"=true scope=spfile;

3 创建控制文件(根据实际情况填写)

          create controlfile reuse database orcl resetlogs

 datafile

 '/u01/app/oracle/oradata/orcl/system01.dbf',

 '/u01/app/oracle/oradata/orcl/sysaux01.dbf',

          '/u01/app/oracle/oradata/orcl/users01.dbf',

          '/u01/app/oracle/oradata/orcl/example01.dbf',

          '/u01/app/oracle/oradata/orcl/undotbs01.dbf'

  logfile

   group 1 '/u01/app/oracle/oradata/orcl/redo01.log' size 50m,

   group 2 '/u01/app/oracle/oradata/orcl/redo02.log' size 50m,

   group 3 '/u01/app/oracle/oradata/orcl/redo03.log' size 50m;

4 查看当前数据文件的scn号

    select checkpoint_change# from v$datafile;

5 修改level级别(level 级别的原理不是很明白)

超过10亿 用 2

6 查看是否可以进行open resetlogs 如果结果为NOT ALLOWED 退出sql 然后创新创建控制文件,设置level级别,反复执行

    select open_resetlogs from v$database;

7 执行 resetlogs  

    alter database open resetlogs;

8 如果resetlogs报错

   exit

   startup force nomount;  

   alter session set events  '10015 trace name adjust_scn level 1';

   alter database open resetlogs;

到这里就可以把数据库open起来了。实在不好意思,上面的操作是晚上做实验到1点了,忘了做记录了,所以输出内容没有写,以后会写的更好,更详细。

但是我库open了以后新的问题又来了,当我随便创建了一个表时,实例自己就蹦掉了,查看警报日志发现ORA_600[4194]

   查看警报日志

   vim /u01/app/oracle/admin/orcl/bdump/alert_orcl.log

Completed: alter database open

Tue Feb 25 00:16:57 2014

Errors in file /u01/app/oracle/admin/orcl/bdump/orcl_j000_15099.trc:

ORA-00600: internal error code, arguments: [4194], [58], [55], [], [], [], [], []

DEBUG: Replaying xcb 0x43a07dc4, pmd 0x43b99958 for failed op 8

Doing block recovery for file 2 block 437

Block recovery from logseq 4, block 67 to scn 2147544346

Recovery of Online Redo Log: Thread 1 Group 3 Seq 4 Reading mem 0

Mem# 0 errs 0: /u01/app/oracle/oradata/orcl/redo03.log

Block recovery completed at rba 4.79.16, scn 0.2147544348

Tue Feb 25 00:16:58 2014

Tue Feb 25 00:17:00 2014

ORA-00600: internal error code, arguments: [4194], [58], [55], [], [], [

2号文件为undo 表空间,需要重建undo

   elect * from dba_data_files where file_id=2;

解决ORA_600[4194]错误办法:

9 设置undo表空间的管理方式为:手工,缺省undotbs 为空,实际上市使用了 system 回滚段。

   SQL>  alter system set undo_management = manual scope=spfile;

   System altered.

   SQL>  alter system set undo_tablespace='' scope=spfile;

   SQL> startup force

   ORACLE instance started.

   Total System Global Area  583008256 bytes

   Fixed Size                  2022504 bytes

   Variable Size             184550296 bytes

   Database Buffers          394264576 bytes

   Redo Buffers                2170880 bytes

   Database mounted.

   Database opened.

10 创建新的undo表空间:

   SQL>  create undo tablespace undotbs2  

         2  datafile '/oracle/oradata/lixora/undotbs2.dbf' size 100M;

             Tablespace created.

11 设置undo管理方式为 ’自动‘:

   SQL> alter system set undo_management =auto scope=spfile;

12 设置undotbs 为新建的undotbs2:

   SQL> alter system set undo_tablespace = undotbs2 scope=spfile;

13 删除原来损坏的undo表空间,然后在重新启动。

   SQL>  drop tablespace undotbs02 including contents and datafiles;

   Tablespace dropped.

   SQL> startup force;

   Variable Size             234881944 bytes

   Database Buffers          343932928 bytes

本人疑惑:

1   修改隐藏参数 alter system set "_allow_error_simulation"=true scope=spfile; 其原理?

2  修改level级别   alter session set events  '10015 trace name adjust_scn level 1'; 其原理?

最后我有一个疑惑是,删除了日志文件和控制文件 为什么undo会损坏呢? 和undo有什么关系,虽然我做成功了,但是目前还是没有搞明白,希望大家赐教一下。

到这里就可以完全修复了,在文章里有一些我不明白的地方,我确实现在不知道,希望知道的可以解答一下互相学习,大神们不要见笑,以后会更好的。