我申请这个blog是为了督促自己,把自己平时的一些想法和思考结果保留下来。 本博客所有内容均为原创,如有转载请注明作者和出处

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.*
@3MeM Jvp@0        FROMITPUB个人空间6H7lf~YO(]
        (
Fr|um z0                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`"Ip I u
                AND ROWNUM <= 10
3WPy4_n.P0\YA/|0        ) A
-\Mr1g`)`+F5~0)
mx/UXqB }g0WHERE RN >= 1

Oracle对这个7445错误给出了三个已知bug的链接,其中一个与星型查询有关,第二个与pushed join predicate有关。当前的情况与二者都不相符。而第三个bug与分析函数有关,而这和当前问题是一致的。

根据这个文档Doc ID: Note:2913155.8的描述,在SQL中使用分析函数,且SQL不带ORDER BY语句,可能造成这个7445错误。

这个bug确认影响的版本为9204Oracle920510g中解决了这个bug

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     ( 
*~l UH|4Q0  8             SELECT  MAX(ROWNUM) OVER() ROWCOUNT,
:V*p4N|Ye0}.?,N0  9                     O.RECORD_ID,
\^*t(G i\9f;~.r0 10                     OI.ORD_ITEM_OOS_STATEITPUB个人空间0E;Q*~},A6\$pIn9s
 11             FROM ORD_ORDER_ITEM O ,ORD_ITEM_OOS OIITPUB个人空间i%E LHh5Q$_
 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 [5q mn0 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 JSG dW)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&a MH0 16  )ITPUB个人空间.u/P5z i"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/aLWh1U?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/wAv:IO|0  9     AND ROWNUM <= 5
k/T g S&wD0 10  )
j IJ$o/aD7i;] }+f0 11  ;

  ROWCOUNT TABLE_NAME                     OBJECT_NAMEITPUB个人空间2qT:s Tg2n:I
---------- ------------------------------ ------------------------------ITPUB个人空间G&PZ-k5m_5DA
         5 AUDIT_ACTIONS                  AUDIT_ACTIONS
1cJQ;Tm/DV}0         5 DUAL                           DUAL
+`,qf*tC+o0i9_0         5 ODCI_SECOBJ$                   ODCI_SECOBJ$
PR%C,[ |z,E8@!b0         5 ODCI_WARNINGS$                 ODCI_WARNINGS$
0E/l'o0g+H:Q j|0         5 PLAN_TABLE                     PLAN_TABLE

问题没有重现,考虑到FIRST_ROWS提示是导致bug产生的条件之一,说明很可能是索引扫描导致的问题,为T1表添加索引,再次尝试查询:

SQL> CREATE INDEX IND_T1_NAME ON T1(TABLE_NAME);

Index created.

SQL> SELECT /*+ FIRST_ROWS */ *
;bKWg8@3X8{0  2  FROM
!v#A(yJk0  3  (ITPUB个人空间9_7S? mL/M N1X
  4     SELECT  MAX(ROWNUM) OVER() ROWCOUNT,ITPUB个人空间4S;BEw+KU2qjc
  5             TABLE_NAME,
g?+A:t K%Hy0  6             OBJECT_NAME
)M/w e8UQ!}7NA%O0  7     FROM T, T1ITPUB个人空间+];h%`%N7M9M l$Q ^K:LJq
  8     WHERE T.OBJECT_NAME = T1.TABLE_NAME 
%TT;RRB-P_3V iz8`0  9     AND ROWNUM <= 5ITPUB个人空间nB,j_3_`;j
 10  )
1hzZN[b1?-} fy X0 11  ;ITPUB个人空间5_'N$rM*bx"Kv+HLkQ6p
FROMITPUB个人空间0adYE#S+k8G'_2eJq
 *
br2os5e0ERROR at line 2:
]h s,x2o0ORA-03113: end-of-file on communication channel

问题果然重现,看来问题还与索引扫描有关。那么是否不加FIRST_ROWS而使用INDEX提示一样可以导致问题重现呢:

SQL>CONNTESTITPUB个人空间(B4R*MS-g0C*qec6x
Enter password:ITPUB个人空间[i D*V2A{;M`@
Connected.ITPUB个人空间3L|N5b8q_-L+g
SQL> SELECT /*+ INDEX(T1) */ *
;[1x8|l8H7l0  2  FROMITPUB个人空间,w"l5]0or)r0Zj
  3  (
DaJ3\LKN f u2z0  4     SELECT  MAX(ROWNUM) OVER() ROWCOUNT,ITPUB个人空间;U7r(m?a[F0f
  5             TABLE_NAME,ITPUB个人空间 ~ Erw?7Az.s#zTf
  6             OBJECT_NAME
Gz#b)}%B7J8Z0  7     FROM T, T1ITPUB个人空间.X6s[!c2h
  8     WHERE T.OBJECT_NAME = T1.TABLE_NAME 
`-oq c J0  9     AND ROWNUM <= 5
^P)~Jw0_y7R'CQ5P0 10  )
/z_ H&q%cw-F8t6],a0 11  ;

  ROWCOUNT TABLE_NAME                     OBJECT_NAME
;a)lG(~9S0---------- ------------------------------ ------------------------------ITPUB个人空间\l9t1qcme7v,N q
         5 AUDIT_ACTIONS                  AUDIT_ACTIONSITPUB个人空间:J ^!Lk)jh p8DL
         5 DUAL                           DUAL
$G p"ZN(H}0         5 ODCI_SECOBJ$                   ODCI_SECOBJ$
9g7I?4Nnn?t0         5 ODCI_WARNINGS$                 ODCI_WARNINGS$ITPUB个人空间 x#L.j6|oS8mN
         5 PLAN_TABLE                     PLAN_TABLE

问题没有重现,那么将整个优化模式改为FIRST_ROWS会怎样:

SQL> ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS;

Session altered.

SQL> SELECT /*+ INDEX(T1) */ *ITPUB个人空间%Q%H G}9mo Ck^
  2  FROMITPUB个人空间FH}O bG$a
  3  (ITPUB个人空间f&u4Q|"q:}"YZ%A
  4     SELECT  MAX(ROWNUM) OVER() ROWCOUNT,
eFW&eqg T [0  5             TABLE_NAME,ITPUB个人空间,A LIh;J7GwP
  6             OBJECT_NAME
4B Me+th#cV6V[0  7     FROM T, T1
x1\)W/dtJ wF0  8     WHERE T.OBJECT_NAME = T1.TABLE_NAME ITPUB个人空间r[,|Up-Y;N
  9     AND ROWNUM <= 5
/v}W"@/z:Os+lM+U,wA0 10  )
3`9ebYz,Qc4[0 11  ;ITPUB个人空间@ X*|YM'O1P UMjY
SELECT /*+ INDEX(T1) */ *ITPUB个人空间9ap9mx+A/[
*
[$G&h p)xE0ERROR at line 1:ITPUB个人空间|N5CxL#q
ORA-03113: end-of-file on communication channel

这次问题重现了,那么将提示改为FULL会如何:

SQL>CONNTESTITPUB个人空间d,k)C8n ve&c
Enter password:ITPUB个人空间P1F*u)[2~T;H!~$M
Connected.
1i[ ]WZ+`9o~a1n0SQL> ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS;

Session altered.

SQL> SELECT /*+ FULL(T1) */ *ITPUB个人空间N8et7Z.S(v5Z:w&W
  2  FROMITPUB个人空间(B;Od#z9h$D9Dp'e"G
  3  (
!f.f1[ ~(p"\2c0  4     SELECT  MAX(ROWNUM) OVER() ROWCOUNT,ITPUB个人空间1L2~M| m7[4p
  5             TABLE_NAME,
K3t#tRL0  6             OBJECT_NAME
u?H9BhV"wmg0  7     FROM T, T1ITPUB个人空间7qn#~5C BD#B]8{ s;^:D
  8     WHERE T.OBJECT_NAME = T1.TABLE_NAME 
:J2X$g$eJ0  9     AND ROWNUM <= 5
{ |,E3etK(SX0 10  )
5UIZug0 11  ;
,Ez m`(fD6B#j B9]0SELECT /*+ FULL(T1) */ *
bL5U8a @r0*
g\$b} I`:m#K0ERROR at line 1:
(A7h y t5\w uk0ORA-03113: end-of-file on communication channel

看来问题和Oracle选择的执行计划并没有关系,前面在EXPLAIN PLAN FOR的过程中报错也说明了问题发生在CBO的分析阶段,而不是执行阶段。那么可以推断是由于CBOFIRST_ROWS模式在分析索引扫描时出现的问题。

SQL> CONN TESTITPUB个人空间W2b Y}/z]b/ug w
Enter password:ITPUB个人空间,D oo0GR*Cg_,W O9w
Connected.
G7u J(IC(L2^'Po0SQL> SELECT /*+ FIRST_ROWS */ *
v)bg6iX3|%Q b0  2  FROM
(F O/|h w#or*vHT0  3  (
o3mHI_c0  4     SELECT  MAX(ROWNUM) OVER(ORDER BY TABLE_NAME) ROWCOUNT,ITPUB个人空间 W8p/a m ZPC7M&S
  5             TABLE_NAME,
J9Q]S.w%|PB0  6             OBJECT_NAME
!?XP Q`|[?0  7     FROM T, T1
/iqety!Yp} a0  8     WHERE T.OBJECT_NAME = T1.TABLE_NAME 
{/Or r R!Z,}LP0  9     AND ROWNUM <= 5ITPUB个人空间TNM'RR9t-K:c`
 10  )ITPUB个人空间 D ]FI*^ i D"m0NC
 11  ;
+zLd)z.R`(u,tW"j4^0SELECT /*+ FIRST_ROWS */ *
C+f}/s e;b+`0*
;d0}"eN e"YEuT0ERROR at line 1:
0W.A"li_G q0ORA-03113: end-of-file on communication channel

ITPUB个人空间'a [ `+PM F(mK!N
SQL> CONN TEST
C#M-h-XKZZ"n-a]0Enter password:ITPUB个人空间*PX7O1Ww*o G ^,S1U
Connected.
:I-gDDi4S V0SQL> SELECT /*+ FIRST_ROWS */ *
&f-N:X8d2?6l_0  2  FROM
T/M5^V/Bl`3G*x0  3  (
lAa,Z%OT0  4     SELECT  MAX(ROWNUM) OVER() ROWCOUNT,
"j9LY$W x bc9y0  5             TABLE_NAME,
x ~!E r R0  6             OBJECT_NAMEITPUB个人空间`/A+__!et9G;@,P
  7     FROM T, T1ITPUB个人空间?+O2M];F4g|
  8     WHERE T.OBJECT_NAME = T1.TABLE_NAME ITPUB个人空间k%r5A$YL'IG0a8fr4f9j
  9     AND ROWNUM <= 5
{v0^/}#p0 10     ORDER BY TABLE_NAMEITPUB个人空间&p*X`7z3]9`
 11  )ITPUB个人空间y3m%pTlU-I
 12  ;

  ROWCOUNT TABLE_NAME                     OBJECT_NAME
N4Gb\l[V r0---------- ------------------------------ ------------------------------
{xJ-ZU:F0         5 AUDIT_ACTIONS                  AUDIT_ACTIONS
?Jm y0a:l^0         5 DUAL                           DUAL
.u^ p5Sb$h.J]0         5 ODCI_SECOBJ$                   ODCI_SECOBJ$
_g-ar,n-]D0         5 ODCI_WARNINGS$                 ODCI_WARNINGS$ITPUB个人空间2pxO1X4i2l%_Z!h[
         5 PLAN_TABLE                     PLAN_TABLE

SQL> SELECT /*+ FIRST_ROWS */ *ITPUB个人空间*nEi2Y&CnDK
  2  FROMITPUB个人空间.|-DN4@o:HN,ce&V
  3  (
[-d*{ ODA_ X0  4     SELECT  TABLE_NAME,
E q6V] Qs` dAg0  5             OBJECT_NAMEITPUB个人空间)F*T&h/ZVjVa6X
  6     FROM T, T1ITPUB个人空间\g'~Ym?#W4J
  7     WHERE T.OBJECT_NAME = T1.TABLE_NAME ITPUB个人空间u|+p&w7E/gTi,T
  8     AND ROWNUM <= 5ITPUB个人空间+uv@#@?-E`
  9  )ITPUB个人空间~8y N5ce*iA
 10  ;

TABLE_NAME                     OBJECT_NAMEITPUB个人空间U%|)V$CM&K*`C]
------------------------------ ------------------------------ITPUB个人空间)_l|;RR8Xmf
AUDIT_ACTIONS                  AUDIT_ACTIONSITPUB个人空间g:ZM {TS~[
DUAL                           DUALITPUB个人空间 B uzjklrq|1q
ODCI_SECOBJ$                   ODCI_SECOBJ$
&I#S7Tb"x&O6N0ODCI_WARNINGS$                 ODCI_WARNINGS$
/x_e"IjmG%Z0PLAN_TABLE                     PLAN_TABLE

最后对比上面三个查询,可以推断,是否产生问题与SQL语句的ORDER BY语句有关,而与分析函数的ORDER BY语句没有关系。此外分析函数也是导致问题的主要原因之一。

 


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar