Chinaunix首页 | 论坛 | 博客
  • 博客访问: 544853
  • 博文数量: 13
  • 博客积分: 1941
  • 博客等级: 上尉
  • 技术积分: 376
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-05 11:21
个人简介

Where there is a will there is a way

文章分类

全部博文(13)

文章存档

2013年(4)

2012年(9)

分类: Oracle

2013-10-10 23:26:02

错误信息为:

Tue oct 02 11:39:02 2013
Errors in file /oracle9/app/admin/db/udump/db1_ora_2319324.trc:
ORA-00600: internal error code, arguments: [ksmals], [sql txt in kkslod], [], [], [], [], [], []

查询这个错误,确认是Oracle的bug,详细描述可以参考:ORA-600 [ksmals], [sql txt in kkslod], [] Selecting Against x$kgllk [ID 550066.1]。这个问题影响9.2到11.1之间的所有版本。当查询x$kgllk内部表,或基于这个内部表的视图时,就可能引发这个问题。

从对应的trace文件中可以看到,导致错误的SQL在查询V$OPEN_CURSOR和V$SQL视图:

*** SESSION ID:(2144.35639) 2013-10-2 11:39:02.143
*** 2013-10-2 11:39:02.143
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [ksmals], [sql txt in kkslod], [], [], [], [], [], []
Current SQL statement for this session:
select q.sql_text
from v$open_cursor o, v$sql q
where q.hash_value=o.hash_value and o.sid = 3379

而查询V$SQL和V$OPEN_CURSOR的视图定义:

SQL> select view_definition from v$fixed_view_definition where view_name = 'GV$OPEN_CURSOR';

VIEW_DEFINITION
---------------------------------------------------------------------------
select inst_id,kgllkuse, kgllksnm, user_name, kglhdpar, kglnahsh,
kgllksqlid, kglnaobj, kgllkest,
decode(kgllkexc, 0, to_number(NULL), kgllkexc), kgllkctp
from x$kgllk where kglhdnsp = 0 and kglhdpar != kgllkhdl

显然是由于查询了V$OPEN_CURSOR视图,从而访问了X$KGLLK,进而引发了这个bug。

解决这个问题的办法有很多,比如将数据库版本升级到10.2.0.5,或者安装单独的补丁Patch 5745084。在安装Patch 5745084后,还需要设置EVENT 10778的level 1,才能将这个bug FIXED掉。

除了这些方法外,尝试修改SQL语句也是一个不错的方法,因为并非虽有访问V$OPEN_CURSOR视图的查询都会出现这个错误。适当的改变写法,可能就能绕过这个错误。

 

阅读(1750) | 评论(0) | 转发(0) |
0

上一篇:数据库基本概念

下一篇:没有了

给主人留下些什么吧!~~