ORA-7445(kkojnp)错误
上一篇 / 下一篇 2008-04-03 23:45:48 / 个人分类:Bug
查询alert文件,发现ORA-7445 [KKOJNP]错误,出错数据库版本为9204 for Linux X86-64。
错误信息为:
Errors in file /data/admin/testcen/udump/testcen_ora_14291.trc:ITPUB个人空间|!b*e,Bs(]xX2_
ORA-07445: exception encountered: core dump [kkojnp()+11380] [SIGSEGV] [Address not mapped to object] [0x000000002] [] []
出错SQL信息为:
ORA-07445: exception encountered: core dump [kkojnp()+11380] [SIGSEGV] [Address not mapped to object] [0x000000002] [] []
]0N+u
o7r!n7l0Current SQL statement for this session:ITPUB个人空间{j~^J(qN&@
SELECT /*+ FIRST_ROWS */ *
"z@5iJ#nB0FROM
Qx#|)L#ns&fe0(ITPUB个人空间&v,C
x#{}q
R4U
SELECT ROWNUM RN, A.*
@3MeMJvp@0 FROMITPUB个人空间6H7lf~YO(]
(
Fr|umz0 SELECT MAX(ROWNUM) OVER() ROWCOUNT,
i7Y*F_+@3{0 O.RECORD_ID,
r0mU&cCk|0 OI.ORD_ITEM_OOS_STATE
4^wA!{8c{z0 FROM ORD_ORDER_ITEM O ,ORD_ITEM_OOS OIITPUB个人空间%Uo*uO2s$|:_qv`/A
WHERE O.ORDER_ID = OI.ORD_ID
5}F
qF,JD&{0 AND O.ORDER_ID = 'FR20T0000053000000346026'ITPUB个人空间:hNi`"IpIu
AND ROWNUM <= 10
3WPy4_n.P0\YA/|0 ) A
-\Mr1g `)`+F5~0)
mx/UXq B }g0WHERE RN >= 1
Oracle对这个7445错误给出了三个已知bug的链接,其中一个与星型查询有关,第二个与pushed join predicate有关。当前的情况与二者都不相符。而第三个bug与分析函数有关,而这和当前问题是一致的。
根据这个文档Doc ID: Note:2913155.8的描述,在SQL中使用分析函数,且SQL不带ORDER BY语句,可能造成这个7445错误。
这个bug确认影响的版本为9204,Oracle在9205和
而Oracle给出的临时解决方法是去掉FIRST_ROWS提示。
SQL> EXPLAIN PLAN FORITPUB个人空间X'l3X
YE1D1z(g
2 SELECT *ITPUB个人空间lS5`5h:rx
3 FROMITPUB个人空间V"?'\:IwCb*Rw
4 (
|)L
hLZpp%TE+M0 5 SELECT ROWNUM RN, A.*
-E{?4|R%|e0 6 FROM
Xo.dR6u0 7 (
*~lUH|4Q0 8 SELECT MAX(ROWNUM) OVER() ROWCOUNT,
:V*p4N|Ye0}.?,N0 9 O.RECORD_ID,
\^*t(Gi\9f;~.r0 10 OI.ORD_ITEM_OOS_STATEITPUB个人空间0E;Q*~},A6\$pIn9s
11 FROM ORD_ORDER_ITEM O ,ORD_ITEM_OOS OIITPUB个人空间i%ELHh5Q$_
12 WHERE O.ORDER_ID = OI.ORD_ID
-Gys @7m6h,{ w0 13 AND O.ORDER_ID = 'FR20T0000053000000346026'
9B:TcuZ-f%D0XB
f0 14 AND ROWNUM <= 10
r!_7d[5qmn0 15 ) A
;t6[!E_ SAj9C0 16 )ITPUB个人空间Ud1d]^K
17 WHERE RN >= 1ITPUB个人空间8eCl}Sb
18 ;
Explained.
SQL> EXPLAIN PLAN FOR
g gvw,{T$j0 2 SELECT /*+ FIRST_ROWS */ *ITPUB个人空间3a0Q|C(h"QP8nO
3 FROMITPUB个人空间7h#Ti1I J SGdW)d4e$a i
4 (ITPUB个人空间m
}5Ybm,N
5 SELECT ROWNUM RN, A.*ITPUB个人空间M(y6d&Pv
6 FROM
?4|/C-x!H)X^0 7 (
8@'T+E,{8_:A/f?1v0 8 SELECT MAX(ROWNUM) OVER() ROWCOUNT,ITPUB个人空间 jN(ejg0D0eV
9 O.RECORD_ID,ITPUB个人空间B.h%{:muTs:c:_&V
10 OI.ORD_ITEM_OOS_STATEITPUB个人空间CQ9R"e!Ql0s)N
11 FROM ORD_ORDER_ITEM O ,ORD_ITEM_OOS OIITPUB个人空间
A K2{,Pu/X[J
o1n
12 WHERE O.ORDER_ID = OI.ORD_IDITPUB个人空间.s.zF4Bh7b
13 AND O.ORDER_ID = 'FR20T0000053000000346026'
gL,Ex,[*K#x0 14 AND ROWNUM <= 10ITPUB个人空间5bA+T'CI.hOW
15 ) A
5}1~b+H1o&aMH0 16 )ITPUB个人空间.u/P5zi"iYhe6{C
17 WHERE RN >= 1
%`/q,vmkcC0k1]0 18 ;
YB)vD:K6Z,^| }1v0 AND O.ORDER_ID = 'FR20T0000053000000346026'
A$@m6ml"OjN}0 *
PX6]w_3xE0ERROR at line 13:ITPUB个人空间9F|y0Ds~$A$FK
ORA-03113: end-of-file on communication channel
Oracle给出的方法果然有效,而且这个bug似乎可以重现,下面通过构造测试表,看能否重现bug:
SQL> CREATE TABLE T AS SELECT * FROM ALL_OBJECTS WHERE WNER = 'SYS';
Table created.
SQL> CREATE TABLE T1 AS SELECT * FROM ALL_TABLES WHERE WNER = 'SYS';
Table created.
SQL> COL OBJECT_NAME FORMAT A30
k4r(mA.A7f!iaY0SQL> SELECT /*+ FIRST_ROWS */ *
(b)g;|#Ht ]#C0 2 FROM
x,j/aLW h1U?0 3 (
4s|dM5b9M(f8`0 4 SELECT MAX(ROWNUM) OVER() ROWCOUNT,
)?,pE0~"p/Q%N~(f_0 5 TABLE_NAME,ITPUB个人空间 d!M bn9FI
6 OBJECT_NAME
sx!hW+y%{0 7 FROM T, T1ITPUB个人空间n7S~'h w
8 WHERE T.OBJECT_NAME = T1.TABLE_NAME
4a/w Av:IO|0 9 AND ROWNUM <= 5