一次ORA-00600: internal error code, arguments: [12700]排查修复

来源:这里教程网 时间:2026-03-03 19:00:26 作者:

问题描述:

一个客户的数据库从9201升级到9208之后,数据库alert日志中出现以下错误:   Fri May 10 12:23:57 2013     Errors in file d:\oracle\admin\lssgsj\udump\lssgsj_ora_2960.trc:     ORA-00600: internal error code, arguments: [12700], [45510], [79797362], [20], [48083965], [25], [], []

Fri May 10 12:28:13 2013   Errors in file d:\oracle\admin\lssgsj\udump\lssgsj_ora_1760.trc:     ORA-00600: 内部错误代码,参数: [12700], [30385], [80155466], [7], [47216891], [25], [], []

Fri May 10 12:34:50 2013   Errors in file d:\oracle\admin\lssgsj\udump\lssgsj_ora_1188.trc:     ORA-00600: 内部错误代码,参数: [12700], [31400], [79923206], [14], [0], [79], [], []

有些业务查询会报错,需要注意的是,业务前台(使用weblogic)报的并不是ora-00600错误,而是JDBC连接错误。

处理过程:   根据ORA-00600错误的提示,检查d:\oracle\admin\lssgsj\udump\lssgsj_ora_2960.trc     得到如下信息:

*** 2013-05-10 12:23:57.234   ksedmp: internal or fatal error     ORA-00600: internal error code, arguments: [12700], [45510], [79797362], [20], [48083965], [25], [], []     Current SQL statement for this session:     SELECT ID, STEP_ID, ACTION_ID, OWNER, START_DATE, DUE_DATE, FINISH_DATE, STATUS, CALLER FROM OS_HISTORYSTEP WHERE ENTRY_ID = :1 ORDER BY ID DESC

检查这张表格:OS_HISTORYSTEP 是否有坏块:

ANALYZE TABLE BASE1.OS_HISTORYSTEP VALIDATE STRUCTURE ;

分析成功!

分析OS_HISTORYSTEP的索引:

ANALYZE TABLE BASE1.OS_HISTORYSTEP VALIDATE STRUCTURE CASCADE;

报错:   ORA-01499: table/index cross reference failure – see trace file

可以确定是这张表格的索引出现问题。

检查这张表格的所有索引:

SQL> select owner,index_name,table_owner,table_name,table_type,uniqueness from dba_indexes where table_name=’OS_HISTORYSTEP’;

OWNER   INDEX_NAME        TABLE_OWNER         TABLE_NAME        TABLE_TYPE  UNIQUENESS

————————- —————————— —————————— —————————— ———BASE1      PK_OS_HISTORYSTEP       BASE1           OS_HISTORYSTEP        TABLE       UNIQUE    

SQL> select * from dba_ind_columns where index_name=’PK_OS_HISTORYSTEP’;

INDEX_OWNE  INDEX_NAME               TABLE_OWNER       TABLE_NAME        COLUMN_NAME      

—————-  —————————— —————————— —————————— BASE1             PK_OS_HISTORYSTEP          BASE1            OS_HISTORYSTEP           ID              

在重建这张索引之前,使用这个索引做一次查询,会报ORA-00600错误:

select * from base1.OS_HISTORYSTEP where id=41;

而做全表扫描,则不会报错:

select * from base1.OS_HISTORYSTEP;

可以确认PK_OS_HISTORYSTEP索引损坏。

重建这张索引:   alter index base1.PK_OS_HISTORYSTEP rebuild online;

重建完成后再次查询,不再报错:   select * from base1.OS_HISTORYSTEP where id=41;

再次执行有问题的业务查询,恢复正常。

对于索引坏块,一般只需要重建(online)即可解决,如果是表格坏块,可以考虑以下思路:

1、如果有完整的备份(可以使用dbv校验备份文件是否损坏),可以通过完全恢复、表空间恢复甚至数据文件恢复来消除坏块。

2、如果没有可用备份,可以考虑跳过冲突块重建表格,一般使用DBMS_REPAIR.FIX_CORRUPT_BLOCKS标记坏块,使用DBMS_REPAIR.SKIP_CORRUPT_BLOCKS跳过坏块。

3、在有些时候,业务是允许某些坏块的存在的,这时候可以使用DBMS_REPAIR.FIX_CORRUPT_BLOCKS对坏块进行标记。

相关推荐