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。

你可能感兴趣的:(ORA-600(15851)错误)