ORA-600(15851)错误

一个11g上面的错误。

 

 

会话的cursor_sharing设置不为EXACT时,且GROUP BY操作中,聚集函数的参数是常量时,会引发这个bug。

下面通过一个简单的例子来再现问题:

SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
PL/SQL Release 11.1.0.6.0 - Production
CORE    11.1.0.6.0      Production
TNS for Solaris: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production

SQL> SELECT MAX(0), MAX(0) FROM DUAL GROUP BY DUMMY;

    MAX(0)     MAX(0)
---------- ----------
         0          0

SQL> SHOW PARAMETER CURSOR_SHARING

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ----------------
cursor_sharing                       string                 EXACT
SQL> ALTER SESSION SET CURSOR_SHARING = SIMILAR;

会话已更改。

SQL> SELECT MAX(0), MAX(0) FROM DUAL GROUP BY DUMMY;

    MAX(0)     MAX(0)
---------- ----------
         0          0

SQL> SELECT MIN(0), MIN(0) FROM DUAL GROUP BY DUMMY;
SELECT MIN(0), MIN(0) FROM DUAL GROUP BY DUMMY
                                             *
第 1 行出现错误:
ORA-00600: 内部错误代码, 参数: [15851], [], [], [0x000000001], [

避免这个bug的方法就是将CURSOR_SHARING设置为EXACT。上面的例子展示了在EXACT的情况下,Oracle并不报错,而将会话的CURSOR_SHARING修改为SIMILAR,再分析新的SQL,就出现了这个600错误。

METALINK在文章Doc ID:  Note:5757106.8中对这个bug进行了描述,Oracle在10.2.0.4、11.1.0.7和11.2中FIX了这个bug。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值