来源于: http://blog.itpub.net/22458783/viewspace-615501/

这是碰到的第一个11.2上的bug,在利用IGNORE_ROW_ON_DUPKEY_INDEX提示执行插入时,很可能碰到这个错误。

测试版本11.2.0.1 for Linux X86-64:

SQL> select * from v$version;

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

建立一个测试表:

SQL> CREATE TABLE T               
  2  (ID NUMBER, 
  3  NAME VARCHAR2(30), 
  4  CONSTRAINT PK_T PRIMARY KEY (ID));

表已创建。

SQL> INSERT INTO T     
  2  VALUES (100, 'TEST');

已创建 1 行。

SQL> COMMIT;

提交完成。

SQL> INSERT INTO T 
  2  SELECT ROWNUM, OBJECT_NAME
  3  FROM DBA_OBJECTS
  4  ;
INSERT INTO T
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (YANGTK.PK_T)

SQL> INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T(ID)) */ 
  2  INTO T
  3  SELECT ROWNUM, OBJECT_NAME
  4  FROM DBA_OBJECTS
  5  ;
INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T(ID)) */
*
第 1 行出现错误:
ORA-00600: 内部错误代码, 参数: [qerltcInsertSelectRop_bad_state], [], [], [], [], [], [], [], [], [], [], []

显然是由于使用IGNORE_ROW_ON_DUPKEY_INDEX提示引起了错误的产生。查询METALINK没有找到任何关于这个错误的描述。这也难怪,比较11.2才出来的时间不长,估计还没有什么人碰到这个bug。不过Oracle的测试人员没有测试到这个新特性的bug不太应该。

在alert文件中,这个错误信息如下:

Errors in file /data/oracle/diag/rdbms/test112/test112/trace/test112_ora_23223.trc  (incident=2401):
ORA-00600: 内部错误代码, 参数: [qerltcInsertSelectRop_bad_state], [], [], [], [], [], [], [], [], [], [], []
Incident details in: /data/oracle/diag/rdbms/test112/test112/incident/incdir_2401/test112_ora_23223_i2401.trc

对应的trace信息:

*** 2009-09-24 19:05:35.981
*** SESSION ID:(130.13965) 2009-09-24 19:05:35.981
*** CLIENT ID:() 2009-09-24 19:05:35.981
*** SERVICE NAME:(SYS$USERS) 2009-09-24 19:05:35.981
*** MODULE NAME:(SQL*Plus) 2009-09-24 19:05:35.981
*** ACTION NAME:() 2009-09-24 19:05:35.981
 
Incident 2401 created, dump file: /data/oracle/diag/rdbms/test112/test112/incident/incdir_2401/test112_ora_23223_i2401.trc
ORA-00600: 内部错误代码, 参数: [qerltcInsertSelectRop_bad_state], [], [], [], [], [], [], [], [], [], [], []

详细错误信息为:

*** 2009-09-24 19:05:35.982
*** SESSION ID:(130.13965) 2009-09-24 19:05:35.982
*** CLIENT ID:() 2009-09-24 19:05:35.982
*** SERVICE NAME:(SYS$USERS) 2009-09-24 19:05:35.982
*** MODULE NAME:(SQL*Plus) 2009-09-24 19:05:35.982
*** ACTION NAME:() 2009-09-24 19:05:35.982
 
Dump continued from file: /data/oracle/diag/rdbms/test112/test112/trace/test112_ora_23223.trc
ORA-00600: 内部错误代码, 参数: [qerltcInsertSelectRop_bad_state], [], [], [], [], [], [], [], [], [], [], []

========= Dump for incident 2401 (ORA 600 [qerltcInsertSelectRop_bad_state]) ========

*** 2009-09-24 19:05:35.984
dbkedDefDump(): Starting incident default dumps (flags=0x2, level=3, mask=0x0)
----- Current SQL Statement for this session (sql_id=81hhzbq7z7skv) -----
INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T(ID)) */
INTO T
SELECT ROWNUM, OBJECT_NAME
FROM DBA_OBJECTS

----- Call Stack Trace -----
calling              call     entry                argument values in hex      
location             type     point                (? means dubious value)     
-------------------- -------- -------------------- ----------------------------
skdstdst()+36        call     kgdsdst()            000000000 ? 000000000 ?
                                                   7FFFF5EB1E08 ? 000000001 ?
                                                   7FFFF5EB6308 ? 000000000 ?
ksedst1()+98         call     skdstdst()           000000000 ? 000000000 ?
                                                   7FFFF5EB1E08 ? 000000001 ?
                                                   000000000 ? 000000000 ?
ksedst()+34          call     ksedst1()            000000000 ? 000000001 ?
                                                   7FFFF5EB1E08 ? 000000001 ?
                                                   000000000 ? 000000000 ?
dbkedDefDump()+2736  call     ksedst()             000000000 ? 000000001 ?
                                                   7FFFF5EB1E08 ? 000000001 ?
                                                   000000000 ? 000000000 ?
ksedmp()+36          call     dbkedDefDump()       000000003 ? 000000002 ?
                                                   7FFFF5EB1E08 ? 000000001 ?
                                                   000000000 ? 000000000 ?
ksfdmp()+64          call     ksedmp()             000000003 ? 000000002 ?
                                                   7FFFF5EB1E08 ? 000000001 ?
                                                   000000000 ? 000000000 ?
dbgexPhaseII()+1764  call     ksfdmp()             000000003 ? 000000002 ?
                                                   7FFFF5EB1E08 ? 000000001 ?
                                                   000000000 ? 000000000 ?
dbgexProcessError()  call     dbgexPhaseII()       2AAAAC2EF6F0 ? 2AAAAC2F03F0 ?
+2279                                              7FFFF5EBE0F8 ? 000000001 ?
                                                   000000000 ? 000000000 ?

测试发现,不管IGNORE_ROW_ON_DUPKEY_INDEX的哪种写法,都会引发这个600错误,但是如果插入数据量小的话,可能并不会引发错误:

SQL> INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T(ID)) */ 
  2  INTO T
  3  SELECT ROWNUM, OBJECT_NAME
  4  FROM DBA_OBJECTS
  5  WHERE ROWNUM <= 200;

已创建199行。

SQL> ROLLBACK;

回退已完成。

SQL> INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T(ID)) */ 
  2  INTO T
  3  SELECT ROWNUM, OBJECT_NAME
  4  FROM DBA_OBJECTS
  5  WHERE ROWNUM <= 1000;
INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T(ID)) */
*
第 1 行出现错误:
ORA-00600: 内部错误代码, 参数: [qerltcInsertSelectRop_bad_state], [], [], [], [], [], [], [], [], [], [], []

可以看到,如果插入200条记录,则不会报错。如果插入的数据量达到1000,则会引发ORA-600错误。

进一步测试发现,如果插入行数超过255,就会报错,看来应该是某个变量超过了上限导致的错误。

SQL> INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T, PK_T) */
  2  INTO T 
  3  SELECT * 
  4  FROM T1
  5  WHERE ROWNUM <= 250;

已创建249行。

SQL> INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T, PK_T) */
  2  INTO T
  3  SELECT * 
  4  FROM T1 
  5  WHERE ROWNUM <= 255;

已创建5行。

SQL> INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T, PK_T) */
  2  INTO T
  3  SELECT *
  4  FROM T1
  5  WHERE ROWNUM <= 256;
INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T, PK_T) */
*
第 1 行出现错误:
ORA-00600: 内部错误代码, 参数: [qerltcInsertSelectRop_bad_state], [], [], [], [], [], [], [], [], [], [], []

ORA-600(qerltcInsertSelectRop_bad_state)错误的更多相关文章

  1. ORA 各种oraclesql错误

    ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出 ...

  2. 记录一则ORA-600 [13011]错误

    环境:Solaris 10 + Oracle 11.2.0.1 现象:alert告警日志定期出现ORA-600 [13011]错误 1.故障现象 2.初步分析 3.匹配MOS 4.定位解决 1.故障现 ...

  3. <转>ORA-06413 连接未打开错误

    ORA-06413 Connection not open.Cause: Unable to establish connection.Action: Use diagnostic procedure ...

  4. Oracle的常见错误及解决办法

    ORA-12528: TNS:listener: all appropriate instances are blocking new connections ORA-12528问题是因为监听中的服务 ...

  5. 【Oracle错误集锦】:ORA-00119 &amp; ORA-00132

    有时候老天就是爱和你开玩笑,昨天好不easy配置好Oracle.可以用PL/SQL正常登录使用,今天突然就不行了.而且错误十分诡异,没有提示什么错误代码.输入usernamepassword,点击登录 ...

  6. 数据库报ORA-00600: 内部错误代码, 参数: [17059],并产生大量trace日志文件

    用户反馈数据库服务器磁盘空间使用耗尽. 登录服务器后查看,发现数据库产生大量的trace日志,并在alert日志中发现ora-600错误 alert日志信息: Fri Jul :: Errors ): ...

  7. ORA-00600: 内部错误代码, 参数: [kqlnrc_1]

    如以下的错误: Mon Mar 31 18:45:59 2014 Errors in file /oracle/app/oracle/diag/rdbms/zscims/zscims2/trace/z ...

  8. OCA读书笔记(18) - 使用Support工具

    调查和解决问题 问题:数据库中的任一严重的错误定义为一个问题,一般来说,这些错误包括大家熟悉的ORA-600错误和ORA-04031(共享池超出)错误,涉及数据库问题的所有元数据都存储在ADR中,每个 ...

  9. ORA-00600 [kollasg:client-side tmp lob]

    今天在查看一个库的日志时,发现被ORA-00600 [kollasg:client-side tmp lob] 错误刷屏了. 发生该错误的原因是由于应用那边lob的问题.lob没有被初始化,建议使用E ...

随机推荐

  1. Java Web之请求和响应

    Servlet最主要作用就是处理客户端请求并作出回应,为此,针对每次请求,Web容器在调用service()之前都会创建两个对象,分别是HttpServletRequest和HttpServletRe ...

  2. Teredo 是一项 IPv6/IPv4 转换技术

     Teredo 是一项 IPv6/IPv4 转换技术,能够实现在处于单个或者多个 IPv4 NAT 后的主机之间的 IPv6 自动隧道.来自 Teredo 主机的 IPv6 数据流能够通过 NAT,因 ...

  3. [No000046]为什么跳槽加薪会比内部调薪要高?

    有网友在知乎提问: 最近在思考一个问题,为什么跳槽往往意味着加薪? 如果一个人确有价值,为什么在原来的公司没有在薪水上体现出来?如果没有价值,为什么跳槽以后就会加薪?还是可以单纯的解释为,应聘者和招聘 ...

  4. java 22 - 23 多线程之定时器的概述和使用例子

    定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行. 在Java中,可以通过Timer和TimerTask类来实现定义调度的功能 开发中 Quartz是一个完全由java编 ...

  5. mac系统使用内置的 PHP

    从 OS X 10.0.0 版本开始,PHP 作为 Mac 机的标准配置被提供.在默认的 web 服务器中启用 PHP,只需将 Apache 配置文件 httpd.conf 中的几行配置指令最前面的注 ...

  6. FMDB处理动态插入语句

    昨天做一个需求,参数的数量不确定,所以无法使用这个API: - (BOOL)executeUpdate:(NSString*)sql, ... 但是用 - (BOOL)executeUpdate:(N ...

  7. Spring 3.x jar 包详解 与 依赖关系

    以下的内容我会持续更新(当然是我有新发现的时候); 以下内容是我在网上搜索.整理.修改的而成的内容.由于很多内容都是转载了,无法追溯到源头,因此无法一一对原作者进行道谢. 这几天,我查阅大量的官方的文 ...

  8. FSL - DualRegression

    Source:http://fsl.fmrib.ox.ac.uk/fsl/fslwiki/DualRegression Research Overview A common need for anal ...

  9. poj3270

    Cow Sorting Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6750   Accepted: 2633 Descr ...

  10. WP老杨解迷:可知评论系统还能勾搭用户呢

    玩家可以忍受任何游戏内的磨难,但偏偏不能忍受游戏外的挫折,这个游戏外可不是因为系统原因怒摔手机的义举,更加不是线下见面互炫菊花转投阵营的冲动,有可能是登录的瞬间,那小小的提示,又出问题了,登录不上去, ...