今天在后台alert文件中发现了一个ORA-600错误,这个错误是由于取消当前操作引发的。
日志中的错误记录如下:
Mon Apr 21 13:38:10 2008ITPUB个人空间:Bv;B'J$KEO1~
Errors in file /opt/oracle/admin/tradedb/udump/tradedb2_ora_12736.trc:ITPUB个人空间8j@!A?r9Iu2t
ORA-00600:内部错误代码,参数: [17285], [0xFFFFFFFF7AFD0938], [4294967295], [0x6E6A84068], [], [], [], []
!L'u(TU YV qj"[0ORA-00604:递归SQL级别1出现错误
j-k:@8w,KHOd5^8~0ORA-01013:用户请求取消当前的操作
"o8C
J%b3o3my0Mon Apr 21 13:38:11 2008ITPUB个人空间 ?~]0a8})d]
Trace dumping is performing id=[cdmp_20080421133811]ITPUB个人空间5g%|b8Q#A%E~a K Ed
Mon Apr 21 13:38:11 2008ITPUB个人空间 ~V(Ct[)^xN8TI+U
Errors in file /opt/oracle/admin/tradedb/udump/tradedb2_ora_12736.trc:
"]@3HBD0ORA-07445:出现异常错误:核心转储[kkxgpieb()+36] [SIGSEGV] [Address not mapped to object] [0xFFFF0000000001B8] [] []ITPUB个人空间zk cG/WG;]
Mon Apr 21 13:38:11 2008
0M]xaQi&L0Errors in file /opt/oracle/admin/tradedb/udump/tradedb2_ora_12736.trc:
4tOD.d,A0ORA-07445:出现异常错误:核心转储[pfrtcs()+16] [SIGSEGV] [Address not mapped to object] [0xFFFF000000000214] [] []ITPUB个人空间 H;Z~KP,^nj_{]
ORA-07445:出现异常错误:核心转储[kkxgpieb()+36] [SIGSEGV] [Address not mapped to object] [0xFFFF0000000001B8] [] []
根据错误信息和错误的发生时间,基本上可以确定,问题是由于取消当前操作引起的,下面检查一下详细信息,查看当前执行的操作是什么。
Trace开头部分内容如下:
Oracle Database10gEnterprise Edition Release 10.2.0.3.0 - 64bit ProductionITPUB个人空间'se4x3J}6BM-`
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
t/G[Ja0ORACLE_HOME = /opt/oracle/product/10.2/databaseITPUB个人空间+h{%ul)v`A
System name: SunOS
[6^anhL_xY&\0Node name: ahrac2
!]&z6C:CB0A4Yx0Release: 5.10
,R`y{ B,nm U0Version: Generic_118833-33ITPUB个人空间Lw(w.tx
Machine: sun4u
9\GkkY'g
f0Instance name: tradedb2
"p%g$VX{3u0Redo thread mounted by this instance: 2
zb([L3A u0Oracle process number: 88ITPUB个人空间8czl;K~S0gcl?
Unix process pid: 12736, image: oracletradedb2@ahrac2
*** 2008-04-21 13:38:10.102
&v4Q*Z/XM6PN0Z h0*** ACTION NAME:(Test Window - Script. for procedu) 2008-04-21 13:38:10.090ITPUB个人空间V!agE/hZA
*** MODULE NAME:(PL/SQL Developer) 2008-04-21 13:38:10.090ITPUB个人空间
];J
i4?z6g
*** SERVICE NAME:(tradedb.us.oracle.com) 2008-04-21 13:38:10.090
vx:V P
{"Q^n+F
G0*** SESSION ID:(121.9708) 2008-04-21 13:38:10.090
5YLBKY2A?Ms8|0*********START PLSQL RUNTIME DUMP************
d Q8F'{0H*s8RTvs
M-^0***Got internal error Exception caught in pfrrun() while running PLSQL***ITPUB个人空间:O5l2lC5G!P?y7X
***Got ORA-1013 while running PLSQL***
0fh1u.ud0PACKAGE BODY SYS.PBREAK:
从这里可以看到错误会话是通过PL/SQL Developer连接到数据库的,其实如果对这个错误熟悉的话,从这里还能看出更多的东西,这个后面再说。
下面是出错SQL部分:
ksedmp: internal or fatal error
&@#aW
G ld0ORA-00600:内部错误代码,参数: [17285], [0xFFFFFFFF7AFD0938], [4294967295], [0x6E6A84068], [], [], [], []ITPUB个人空间%U#f}[U ?
ORA-00604:递归SQL级别1出现错误
sQ0tN x(B9g*?0ORA-01013:用户请求取消当前的操作ITPUB个人空间W3O}"UGO.f)R
Current SQL statement for this session:
n ? M'SiC^,F0begin
C%p;A(y%b%@L)n0 -- Call the procedureITPUB个人空间t%G]W"TH`
pkg_balance.p_generate_data;
9|XOD:[[C~_0end;
从这里只能看出错误的发生与用户取消操作有关,调用的PL/SQL包本身并没有什么异常。
在METALINK查询参数17285的600错误,并没有发现和当前十分解决的情况,倒是一个7.3上的bug与目前问题最为接近:Doc ID: Note:377047.8,这篇文章的题目为:Bug 377047 PLSQL: ORA-600 [17285] if Ctrl-C in critical code。当然这个bug在8.0.4之前出现,且在7.3.4.2中已经被FIXED。虽然7中的问题在10中再现的可能性不大,不过这个现象的描述确实和当前的情况最为解决。
既然通过17285找不到什么有意义的信息,这个问题同时还引发了3个ORA-7445错误,其中两个参数为kkxgpieb,一个为pfrtcs。看看从这两个参数入手能不能找到什么有意义的信息。
首先继续查看当前的trace文件,找到这三个错误发生时,执行的SQL语句:
ksedmp: internal or fatal error
rsu3nG0ORA-07445:出现异常错误:核心转储[kkxgpieb()+36] [SIGSEGV] [Address not mapped to object] [0xFFFF0000000001B8] [] []ITPUB个人空间vx1Z+@
R-U
y0FdD2n[
Current SQL statement for this session:ITPUB个人空间?XXKS
beginITPUB个人空间*Px|IrIjz
sys.dbms_debug.default_timeout := 3600;
Iqm2?gP8O[0 sys.dbms_debug.debug_off;
%u~ BW-AQ0U
Y d0end;ITPUB个人空间$uz2hxX*q z.x
Exception signal: 11 (SIGSEGV), code: 1 (Address not mapped to object), addr: 0xffff000000000214, PC: [0x1049bd730, pfrtcs()+16]ITPUB个人空间)fQM[;Pr
*** 2008-04-21 13:38:11.268ITPUB个人空间O_^r;O2X6_B
ksedmp: internal or fatal errorITPUB个人空间/J@5J+z8qox
ORA-07445:出现异常错误:核心转储[pfrtcs()+16] [SIGSEGV] [Address not mapped to object] [0xFFFF000000000214] [] []
G}Z?&Cy4U1{2?HT0ORA-07445:出现异常错误:核心转储[kkxgpieb()+36] [SIGSEGV] [Address not mapped to object] [0xFFFF0000000001B8] [] []
]hX9nU
b{XGu-YL0ksedmp: obtaining current SQL failed earlier. not retrying
从上面的信息看,错误发生在DEBUG过程中。
根据kkxgpieb和pfrtcs为关键字,继续搜索METALINK,其中kkxgpieb参数没有找到有价值的东西,但是查询pfrtcs的时候找到一篇文章对问题进行了比较清晰的说明:Doc ID: Note:464607.1。
文章介绍了在使用调试功能时,在SYS.PBREAK模块中发生的错误可能无法正确的跟踪和处理,从而导致了ORA-600[17285]错误,后面跟着ORA-604错误,而且可能随后会产生ORA-7445[pfrtcs]错误。
看来这就是导致问题的关键,Oracle给出的解决方法是将DEBUG CONNECT SESSION权限授予需要DEBUG的用户。
在当前的例子中,这个权限已经提前授予了,但是可能由于错误是ORA-1031,是用户取消造成的,相对比较特殊,Oracle没有正确的捕获和处理,从而导致了这一系列Oracle内部错误的出现。
总的来说,这个错误出现的概率很小,且本身没有什么维护。