转自:http://blog.itpub.net/7177735/viewspace-1261532/
ORACLE 10.2.0.3.0
平台windows 2003
运行某应用时候出现如下错误:
插入数据表[ ]时出现 ORA-00600:内部错误代码,参数:[kkqcbydrv 1],[],[],[],[],[],[] 错误的
首先分析了下该应用,此为一接口程序,从另外一个应用系统里面取得数据,运行到这一步,应该已经到了本地的统计用户,在存盘之前出现的错误。因是远程应用,联系也不那么通畅,未详细分析SQL中是否含有connect by子句。查询了下网上的帖子,湖湘文化的帖子写的比较详细,认定为
Bug 6838105 - ORA-600 [kkqcbydrv:1] from CONNECT BY query [ID 6838105.8] |
,被确认影响的版本是10.2.0.3和10.2.0.4,
建议:
alter session set optimizer_features_enable='10.2.0.1';
这个参数调整优化器的版本
或者
Disable cost based transformation for connect-by:
alter session set "_optimizer_connect_by_cost_based"=false;
不过既然是隐含参数,自然是不推荐来更改的。
我们来看看官方文档对这个参数的解释:
OPTIMIZER_FEATURES_ENABLE acts as an umbrella parameter for enabling a series of optimizer features based on an Oracle release number.
For example, if you upgrade your database from release 8.0.6 to release 9.2, but you want to keep the release 8.0.6 optimizer behavior, you can do so by setting this parameter to 8.0.6. At a later time, you can try the enhancements introduced in releases up to and including release 9.2 by setting the parameter to 9.2.0.
OPTIMIZER_FEATURES_ENABLE扮演一个保护参数,以便基于一个ORACLE版本号设置一系列优化器特性。
例如,如果你从8.0.6 升级到9.2,但又必须保持版本8.0.6的优化器行为,你可以把此参数设置为8.0.6即可。以后,你可以将此参数设置为9.2.0,在9.2版本或者高于此版本的系统中来尝试新的增强特性。
利用这个参数的设置,可以查看一条SQL在不同版本的优化器的执行情况。
它的值可以查询相应版本的官方文档。
故决定采用第一种方法:
用超级用户连接到本地的统计数据库,运行命令:
SQL〉Alter system set optimizer_features_enable='10.2.0.1' scope=both;
再次运行应用,反馈回来的消息是问题解决,特此记录一下。
不过应该说明的是,这个参数不应该轻易修改,因为这个参数会影响整个数据库,很可能会导致其它性能受到影响,应该经过认证再做更改更为妥当。
Oracle声称在10.2.0.5和11.2.0.1版本中已修复该BUG,但有一帖子:http://www.cnblogs.com/fangwenyu/archive/2010/12/08/1898841.html显示在11.1.0.6 的版本仍然存在同样的问题。Oracle 11.1.0.7 patch set或者11.2.0.1.0就发现这个问题不存在了。
从10g开始,参数optimizer_features_enable是动态的了,这个参数在oracle9i中还是静态的。