日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ORA-600(qerltcInsertSelectRop_bad_state)错误

發布時間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ORA-600(qerltcInsertSelectRop_bad_state)错误 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源于:?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], [], [], [], [], [], [], [], [], [], [], []

轉載于:https://www.cnblogs.com/ys-wuhan/p/5983786.html

總結

以上是生活随笔為你收集整理的ORA-600(qerltcInsertSelectRop_bad_state)错误的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。