ORA-600(kkoipt:invalid join method)錯誤
客戶的11.2.0.2資料庫碰到了這個錯誤。
詳細錯誤資訊如下:
Fri Sep 16 15:23:52 2011
Errors in file /u01/diag/rdbms/ora1/ora1/trace/ora1_ora_20382140.trc
(incident=169704):
ORA-00600: 內部錯誤程式碼, 引數: [kkoipt:invalid join method], [1], [0], [], [], [], [], [], [],
[], [], []
Incident details in: /u01/diag/rdbms/ora1/ora1/incident/incdir_169704/ora1_ora_20382140_i169704.trc
Fri Sep 16 15:24:00 2011
Dumping diagnostic data in directory=[cdmp_20110916152400], requested by
(instance=1, sid=20382140), summary=[incident=169704].
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
而對應的詳細TRACE如下:
bash-3.2$ more /u01/diag/rdbms/ora1/ora1/incident/incdir_169704/ora1_ora_20382140_i169704.trc
Dump file /u01/diag/rdbms/ora1/ora11/incident/incdir_169704/ora1_ora_20382140_i169704.trc
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management,
OLAP,
Data Mining and Real Application Testing options
ORACLE_HOME = /u01/product/11.2.0/dbhome_1
System name: AIX
Node name: node1
Release: 1
Version: 6
Machine: 00F6CD264C00
Instance name: ora1
Redo thread mounted by this instance: 1
Oracle process number: 193
Unix process pid: 20382140, image: oracle@s180
*** 2011-09-16 15:23:52.275
*** SESSION ID:(29.7169) 2011-09-16 15:23:52.275
*** CLIENT ID:() 2011-09-16 15:23:52.275
*** SERVICE NAME:(ora1) 2011-09-16 15:23:52.275
*** MODULE NAME:(TOAD 10.5.0.41) 2011-09-16 15:23:52.275
*** ACTION NAME:() 2011-09-16 15:23:52.275
Dump continued from file: /u01/diag/rdbms/ora1/ora1/trace/ora1_ora_20382140.trc
ORA-00600: 內部錯誤程式碼, 引數: [kkoipt:invalid join method], [1], [0], [], [], [], [], [], [],
[], [], []
========= Dump for incident 169704 (ORA 600 [kkoipt:invalid join method]) ========
*** 2011-09-16 15:23:52.336
dbkedDefDump(): Starting incident default dumps (flags=0x2, level=3, mask=0x0)
----- Current SQL Statement for this session (sql_id=7ukzmn3p6zby6) -----
SELECT *
FROM (
SELECT
a.childpolicyno, a.policyno, e.exportno corpno, a.effectdate,
TO_CHAR (a.lapsedate,
'yyyy-mm-dd') lapsedate, e.chnname,
e.address, e.keyflag,
e.specialflag, g.empname,
g.secdeptname, f.TYPE,
ROWNUM AS ID
FROM t_schildpolicy a,
t_spolicy f,
t_exportcorp e,
t_nodeinfo d,
v_employeecustomer g
WHERE f.policyno = a.policyno
AND f.insurantno =
e.exportno
AND f.policyno =
g.productid(+)
AND d.nodeid = f.nodeid
AND e.chnname LIKE '%%'
AND ((d.corpid = '3502'))
AND ROWNUM <= 10
ORDER BY a.policyno)
WHERE ID BETWEEN 1 AND 10
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
skdstdst()+40 bl
107b6e01c
FFFFFFFFFFECCA8 ? 000002004 ?
000000001 ? 000000003 ?
000000000 ? 000000002 ?
000000001 ? 000000000 ?
ksedst1()+104 call skdstdst() FFFFFFFFFFEBCB0 ? 000002004 ?
110A597A0 ? 10A027B2C ?
110A597A0 ? 000000000 ?
FFFFFFFFFFEBDE0 ? 700000007 ?
ksedst()+40 call ksedst1() 3030000000000 ? 002050033 ?
10A027B20 ? 700000000025C ?
000000000
? 000000000 ?
10A027180 ? 000000000 ?
dbkedDefDump()+2828 call ksedst() FFFFFFFFFFEBE90 ? 000000000 ?
000000000 ? 000000000 ?
000000000 ? 000000000 ?
000000000 ? 300000003 ?
ksedmp()+76 call dbkedDefDump() 310A597A0 ? 1100010C8 ?
FFFFFFFFFFEC490 ?
28444040FFFEC66C ?
100148568 ? 1096635A8 ?
FFFFFFFFFFEC4E0 ? 11064B598 ?
ksfdmp()+88 call ksedmp() 000000000 ? 000000000 ?
0096635C3 ? 109CB2C50 ?
200000000000000 ?
000000000 ?
110C221E8 ? 110A597A0 ?
dbgexPhaseII()+1212 call ksfdmp() 000002004 ? 110A597A0 ?
000000000 ? FFFFFFFFFFEC658 ?
FFFFFFFFFFEC580 ?
FFFFFFFFFFECCA8 ? 1001D04B8 ?
110C221E8 ?
dbgexProcessError() call dbgexPhaseII() 110A597A0 ? 110C203F8 ?
+3604
0000296E8 ? 200000000 ?
FFFFFFFFFFED258 ? 00000006A ?
000000000 ? 000000000 ?
dbgeExecuteForError call dbgexProcessError() 110A597A0 ? 110C221E8 ?
()+72
100000000 ? 000000000 ?
110D01C88 ? 000000000 ?
110CADC78 ? 110C23F30 ?
dbgePostErrorKGE()+ call dbgeExecuteForError FFFFFFFFFFF0830 ?
1152 () B7417335409B9B1B ?
FFFFFFFFFFF06F0 ? 0409B9800 ?
10524EA10 ?
2147AE154168E65F ?
10524EA10 ? 000000000 ?
dbkePostKGE_kgsf()+ call dbgePostErrorKGE() 002050000 ? 001160000 ?
64
25810001330 ? 000000000 ?
110001330 ? FFFFFFFFFFF1510 ?
109613CD0 ? 110CB3F18
?
這個SQL錯誤的奇特之處在於,如果將ORDER BY語句中的a.policyno變成其他列,則不會導致錯誤,甚至是換成與之相等關聯的f.policyno,同樣不會報錯。
這顯然是一個bug,查詢metalink發現,居然目前唯一確認影響的版本就是11.2.0.2,這個Bug的描述為Bug 12591252 Query with ORDER BY fails with ORA-600 [kkoipt:invalid join method]。而Oracle的解釋是,最佳化器試圖透過索引來避免排序操作時,可能引發這個bug。這正好說明了為什麼SQL中換成其他的列就不會導致錯誤。
目前這個bug在Windows平臺的11.2.0.2的patch 10中被fixed,其他平臺只能透過單獨的12591252補丁來解決這個問題。當然如果能透過改寫SQL來實現這個目的,無疑代價是最小的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-707898/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORA-600(kffmXpGet)錯誤
- ORA-600(kcbgcur_1)錯誤GC
- ORA-600 [ttcgcshnd-1 ]錯誤GC
- ORA-600(kclgclk_7)錯誤GC
- ORA-600(kcbnew_3)錯誤
- ORA-600(qersqCloseRem-2)錯誤REM
- ORA-600(qctopn1)錯誤
- ORA-600(kcblasm_1)錯誤ASM
- ORA-600(qkaffsindex5)錯誤Index
- ORA-600(kghuclientasp_03)錯誤client
- ORA-600(ttcgcshnd-2)錯誤GC
- ORA-600(kolaslGetLength-1)錯誤
- ORA-600(kghfremptyds)和ORA-600(kghasp1)錯誤REM
- ORA-600(kssadd: null parent)錯誤Null
- ORA-600(504)(row cache objects)錯誤Object
- ORA-600(ktrgcm_3)錯誤GC
- ORA-600(krvxdds: duplicated session not)錯誤Session
- ORA-600(kjxgrdecidemem1)錯誤IDE
- ORA-600(kfioUnidentify01)錯誤IDE
- ORA-600(qsmqSetupTableMetadata-2)錯誤MQ
- ORA-600(kcratr_scan_lastbwr)錯誤AST
- ORA-600(ksnpost:ksnigb)錯誤
- ORA-600(evapth : unexpected evaluation)錯誤APT
- ORA-600(qkacon:FJswrwo)錯誤JS
- MyBatis 錯誤:Invalid bound statement (not found)MyBatis
- std::sort 錯誤"Expression : invalid operator <"Express
- ORA-600(KSFD_DECAIOPC)和ORA-600(kfioReapIO00)錯誤AIAPI
- ORA-600(kocgor077)錯誤Go
- ora-600內部錯誤的型別型別
- ORA-600[6122]錯誤處理
- ORA-600(krboReadBitmap_badbitmap)錯誤
- Invalid bound statement (not found)錯誤解決
- IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokensExceptionHTTP
- ORA-600(kcbchg1_12)和ORA-600(kdifind:kcbget_24)錯誤
- ORA-600(ktfbbsearch-8)和ORA-600(kewrose_1)錯誤ROS
- ORA-600(kjbrchkpkeywait:timeout)和ORA-600(kclcls_8)錯誤AI
- ORA-600(kauxs_do_jou:3)錯誤UX
- oracle 10.2.0.5 平臺上ORA-600錯誤Oracle