ORA-600(qerltcInsertSelectRop_bad_state)错误
來源于:?http://blog.itpub.net/22458783/viewspace-615501/
?
這是碰到的第一個(gè)11.2上的bug,在利用IGNORE_ROW_ON_DUPKEY_INDEX提示執(zhí)行插入時(shí),很可能碰到這個(gè)錯(cuò)誤。
?
?
測(cè)試版本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
建立一個(gè)測(cè)試表:
SQL> CREATE TABLE T???????????????
? 2? (ID NUMBER,?
? 3? NAME VARCHAR2(30),?
? 4? CONSTRAINT PK_T PRIMARY KEY (ID));
表已創(chuàng)建。
SQL> INSERT INTO T?????
? 2? VALUES (100, 'TEST');
已創(chuàng)建?1?行。
SQL> COMMIT;
提交完成。
SQL> INSERT INTO T?
? 2? SELECT ROWNUM, OBJECT_NAME
? 3? FROM DBA_OBJECTS
? 4? ;
INSERT INTO T
*
第?1?行出現(xiàn)錯(cuò)誤:
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?行出現(xiàn)錯(cuò)誤:
ORA-00600:?內(nèi)部錯(cuò)誤代碼,?參數(shù): [qerltcInsertSelectRop_bad_state], [], [], [], [], [], [], [], [], [], [], []
顯然是由于使用IGNORE_ROW_ON_DUPKEY_INDEX提示引起了錯(cuò)誤的產(chǎn)生。查詢METALINK沒有找到任何關(guān)于這個(gè)錯(cuò)誤的描述。這也難怪,比較11.2才出來的時(shí)間不長(zhǎng),估計(jì)還沒有什么人碰到這個(gè)bug。不過Oracle的測(cè)試人員沒有測(cè)試到這個(gè)新特性的bug不太應(yīng)該。
在alert文件中,這個(gè)錯(cuò)誤信息如下:
Errors in file /data/oracle/diag/rdbms/test112/test112/trace/test112_ora_23223.trc? (incident=2401):
ORA-00600:?內(nèi)部錯(cuò)誤代碼,?參數(shù): [qerltcInsertSelectRop_bad_state], [], [], [], [], [], [], [], [], [], [], []
Incident details in: /data/oracle/diag/rdbms/test112/test112/incident/incdir_2401/test112_ora_23223_i2401.trc
對(duì)應(yīng)的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:?內(nèi)部錯(cuò)誤代碼,?參數(shù): [qerltcInsertSelectRop_bad_state], [], [], [], [], [], [], [], [], [], [], []
詳細(xì)錯(cuò)誤信息為:
*** 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:?內(nèi)部錯(cuò)誤代碼,?參數(shù): [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 ?
測(cè)試發(fā)現(xiàn),不管IGNORE_ROW_ON_DUPKEY_INDEX的哪種寫法,都會(huì)引發(fā)這個(gè)600錯(cuò)誤,但是如果插入數(shù)據(jù)量小的話,可能并不會(huì)引發(fā)錯(cuò)誤:
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;
已創(chuàng)建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?行出現(xiàn)錯(cuò)誤:
ORA-00600:?內(nèi)部錯(cuò)誤代碼,?參數(shù): [qerltcInsertSelectRop_bad_state], [], [], [], [], [], [], [], [], [], [], []
可以看到,如果插入200條記錄,則不會(huì)報(bào)錯(cuò)。如果插入的數(shù)據(jù)量達(dá)到1000,則會(huì)引發(fā)ORA-600錯(cuò)誤。
進(jìn)一步測(cè)試發(fā)現(xiàn),如果插入行數(shù)超過255,就會(huì)報(bào)錯(cuò),看來應(yīng)該是某個(gè)變量超過了上限導(dǎo)致的錯(cuò)誤。
SQL> INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T, PK_T) */
? 2? INTO T?
? 3? SELECT *?
? 4? FROM T1
? 5? WHERE ROWNUM <= 250;
已創(chuàng)建249行。
SQL> INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T, PK_T) */
? 2? INTO T
? 3? SELECT *?
? 4? FROM T1?
? 5? WHERE ROWNUM <= 255;
已創(chuàng)建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?行出現(xiàn)錯(cuò)誤:
ORA-00600:?內(nèi)部錯(cuò)誤代碼,?參數(shù): [qerltcInsertSelectRop_bad_state], [], [], [], [], [], [], [], [], [], [], []
轉(zhuǎn)載于:https://www.cnblogs.com/ys-wuhan/p/5983786.html
總結(jié)
以上是生活随笔為你收集整理的ORA-600(qerltcInsertSelectRop_bad_state)错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求大神翻译
- 下一篇: java selenium验证元素是否存