ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一条语句引起的多个ORA-600、ORA-7445错误

一条语句引起的多个ORA-600、ORA-7445错误

原创 Linux操作系统 作者:yangtingkun 时间:2007-03-01 00:00:00 0 删除 编辑

今天在检查数据库alert文件时发现,一台数据库服务器上出现了多个ORA-600ORA-7445错误。经检查问题是由一条SQL语句造成的。


这里不打算把SQL语句贴出来,一方面和公司业务有关,不方便透露,另一方面是SQL实在是比较长,而且即使有了SQL,而没有所访问的表的表结构,列出SQL的意义也不大。

这里只是简单记录一下问题:

ALERT文件中包含两个ORA-7445错误,这两个错误分别在两个udump文件中,但是引起错误的SQL语句是同一个。

第一次出现7445错误时堆栈中的前几个函数分别是:ksfdrqfillkcflbikcbldio。其中ksfdrqfill似乎也是Oracle调度函数之一,类似sigacthandlerssexhd ksedmp之类的。而使用后两个函数在metalink上查询没有查到什么有意义的内容。而从trace文件上简单分析,似乎是在cursor分配空间是出现了问题。

第二次出现7445错误时,堆栈中前几个函数分别是:kghalfkllcqaskcblasm。在metalink上到是包含了kghalf函数的说明,但是看了这些总结的已知问题,都和这个错误无关。这次错误的trace文件明显比第一个trace文件要大很多,从trace文件中可以看到失败SQL中的绑定变量的具体内容。而这些是第一个trace文件中没有的。

在两次7445错误中间,还出现了两次ORA-600错误。这两次600错误的dump信息在同一个trace文件中。第一个SQL引起的600错误的第一个参数是rworupo.1。从metalink上查询,发现存在很多相关的错误,但是似乎没有和这个问题接近的。

第二个SQL引起的600错误的第一个参数仍然是rworupo.1,但是同时还包括了一个参数是17112600错误,而且之后间隔不远的地方还包括了一个17114600错误,怀疑这三个600错误都是由第二个SQL语句引起的。

而通过查询1711217114错误,终于找到了一个和这个SQL相对比较类似的情况:Bug 3891092 - Memory corruption on query

首先从描述信息:Memory corruption can occur (eg: leading to ORA-600 [17114] ORA-600 [17112])上比较吻合。而且SQL发生的环境也比较类似,都是基于视图的查询。这个bug确定影响的版本是92059207,那么9204上很可能也会发生。

基本上可以确定错误的发生和SQL语句的写法有关。引发600错误的SQL语句和引发7445错误的SQL语句相比,只是在SQL的最后多了一个查询条件而已。看起来可以通过改变SQL的方式来避免这个问题。

最后,这个BUG9208FIXED

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-69185/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10423691