ORA-00600: internal error code, arguments: [kdsgrp1]

      今天,开发人员碰到一个问题,在PL/SQL中调用存储过程时报600错,之所以出现此问题,是因为在跑此存储过程时卡住了,于是直接关掉PL/SQL,再重新打开软件,发现问题,于是开发那边重启oracle实例(还好是开发环境)。。

报错如图:


看到这个图,毫无疑问,不好解决,先看ALERT吧

摘抄:

Errors in file /home/oracle/app/diag/rdbms/orcl/orcl/trace/orcl_ora_3625.trc  (incident=38596):
ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], [], [], [], [], []
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.

直接提示ADRCI。。。

再看TRACE文件:

*** 2015-07-03 10:39:04.076
*** SESSION ID:(980.2401) 2015-07-03 10:39:04.076
*** CLIENT ID:() 2015-07-03 10:39:04.076
*** SERVICE NAME:(SYS$USERS) 2015-07-03 10:39:04.076
*** MODULE NAME:(sqlplus@localhost.localdomain (TNS V1-V3)) 2015-07-03 10:39:04.076
*** ACTION NAME:() 2015-07-03 10:39:04.076


* kdsgrp1-1: *************************************************
            row 0x00414da6.37 continuation at
            0x00414da6.37 file# 1 block# 85414 slot 55 not found
KDSTABN_GET: 0 ..... ntab: 1
curSlot: 55 ..... nrows: 251
kdsgrp - dump CR block dba=0x00414da6
Block header dump:  0x00414da6
 Object id on Block? Y
 seg/obj: 0x69  csc: 0x00.16984295  itc: 2  flg: -  typ: 1 - DATA
     fsl: 0  fnx: 0x0 ver: 0x01


 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0008.007.00003c65  0x00c00c4c.09a9.3b  --U-   49  fsc 0x0768.16984297
0x02   0x000f.016.00001a88  0x00c044fd.03fb.63  C---    0  scn 0x0000.16983e46
bdba: 0x00414da6
data_block_dump,data header at 0x10987005c
===============
tsiz: 0x1fa0
hsiz: 0x208
pbl: 0x10987005c
     76543210
flag=--------
ntab=1
nrow=251


* kdsgrp1-2: *************************************************
DDE: Problem Key 'ORA 600 [kdsgrp1]' was flood controlled (0x4) (incident: 38596)
ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], [], [], [], [], []
* kdsgrp1-1: *************************************************


*** 2015-07-03 13:45:07.007
            row 0x00414da6.37 continuation at
            0x00414da6.37 file# 1 block# 85414 slot 55 not found
KDSTABN_GET: 0 ..... ntab: 1
curSlot: 55 ..... nrows: 251
kdsgrp - dump CR block dba=0x00414da6
Block header dump:  0x00414da6
 Object id on Block? Y
 seg/obj: 0x69  csc: 0x00.16984295  itc: 2  flg: -  typ: 1 - DATA
     fsl: 0  fnx: 0x0 ver: 0x01


 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0008.007.00003c65  0x00c00c4c.09a9.3b  --U-   49  fsc 0x0768.16984297
0x02   0x000f.016.00001a88  0x00c044fd.03fb.63  C---    0  scn 0x0000.16983e46
bdba: 0x00414da6

如红色字体,提示 file# 1 block# 85414 slot 55 not found,于是在网上各种搜索。


根据网络上提供的信息:

1、根据文件号,块号 找到此数据块是哪个表,啊个索引:

SQL> select owner,file_id,segment_name, segment_type, block_id, blocks from dba_extents
where file_id=1 and block_id<=85414 and (block_id + blocks- 1) >= 85414;


OWNER  FILE_ID SEGMENT_NAME    SEGMENT_TYPE BLOCK_ID     BLOCKS
------------------------------ ---------- --------------------------------------------------------------------------------- ------------------ ---------- ----------
SYS 1 SOURCE$    TABLE    85376 128


很明显,问题出在SOURCE$这张基表上,那么这张表是干什么用的呢?原来此表存储的是  存储过程、函数等源码,所对应的视图有:user_source、all_source、dba_source等,那么就有可能是:内存中有逻辑坏块?于是先执行 alter system flush buffer_cache;

再查看存储过程,还是报600错。

2、再试其他方法 执行 :

  SQL> analyze table source$ validate structure cascade online;
analyze table source$ validate structure cascade online
*
ERROR at line 1:
ORA-01499: table/index cross reference failure - see trace file
ora-01449说的已经很明白,看trace文件,其中有:
 kdsgrp1-2: *************************************************
DDE: Problem Key 'ORA 600 [kdsgrp1]' was flood controlled (0x4) (incident: 39341)
ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], [], [], [], [], []
row mismatch in index tsn: 0 rdba: 0x00400638
那么就MOS吧,根据
 ORA-1499. Table/Index row count mismatch (Doc ID 563070.1)此文介绍:将rdba地址转换为十进制,跑SQL
 select dbms_utility.data_block_address_file(4195896)  "Rfile#",dbms_utility.data_block_address_block(4195896) "Block#" from dual; 

    Rfile#     Block#
---------- ----------
 1  1592

SQL> select owner, segment_name, segment_type  from  dba_segments  where header_file =1  and header_block = 1592;

no rows selected 
此处居然是空白。。。
然后用此文档提供的其它SQL来查看,结果都为空白,无解了。
3、尝试删除此存储过程,然后重建,在删除时仍然报600错,于是MOS上各种搜,提供的文档都不于所见问题一样,说是bug吧,那是针对老版本,而此处用的是11.2.0.4,bug已经fixed。
4、考虑到既然此基表数据与索引数据不匹配,那么删除索引再重建是否可以?
结果是报错依旧。
     没办法了,放大招吧,存储过程重写,这个存储过程就不用了。备份数据库,看以后能不能再深入解决吧





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值