码迷,mamicode.com
首页 > 其他好文 > 详细

如何查询ORA-07445 ORA-00600错误相关信息

时间:2015-04-28 18:58:17      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:oracle   ora   

ORA-07445ORA-00600是系统内部错误,一般是由于BUG引起的,要解决或者避免这些错误一般需要到metalink上查。metalink甚至专门推出了一个工具用于这两个错误的查找。

与普通错误不同的是,ORA-07445ORA-00600是一系列错误的总称,引起错误的原因可能成千上万个,如何快速、准确地找出到错误的原因是解决这类问题的难点。
出现ORA-07445ORA-00600错误时,一般都会产生一个trace文件,这个文件的路径和名称可以在alert文件中找到。
这篇文章主要是谈谈如何在trace文件找找出关键信息。

 

 

1ORA-07445

找出ORA-007445最关键是找出出错的函数名(这里的函数是指开发ORALCE的函数),然后根据函数名搜索错误原因及解决方法。
ORA-07445后一般跟着若干个由[]括起来的字符串,通常第一个被[]括起来的字符串就是我们需要的函数名。
ORA-07445的报错一般有两种:
1ORA-07445: exception encountered: core dump [lnxmin()+252] [SIGSEGV] [Address not mapped to object] [0x000000002] [] []
这种情况很简单,第一个被[]括起来的字符串是lnxmin,这就是引发错误的函数名,我们根据这个信息去查就可以了。

2ORA-07445: exception encountered: core dump [0000000100E84B7C] [SIGSEGV] [Address not mapped to object] [0x0000004F0] [] []
这种情况比较麻烦,因为oracle并没有告诉我们出错的函数名,0000000100E84B7C可能只是一个地址,无法根据这个来作为关键字进行查询。
这时我们就要从trace文件着手了。在trace文件内容的前部分中的Call Stack Trace部分可以发现有用信息。
对比一下多个trace文件,可以发现在这种情况下Call Stack Trace一般都包含类似下面的内容:
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedmp()+328 CALL ksedst()+0 FFFFFFFF7FFF3BD0 ?
000000000 ? 000000000 ?
00000003E ?
FFFFFFFF7FFF4468 ?
1031D56C8 ?
ssexhd()+604 CALL ksedmp()+0 000000000 ? 000103400 ?
0001035D9 ? 000102C00 ?
1035D9000 ? 1035D9C28 ?
sigacthandler()+44 PTR_CALL 0000000000000000 1035E1000 ?
FFFFFFFF7FFF5400 ?
000000000 ? 000000001 ?
1035DEDD8 ? 00000000B ?
qsmkzii_init_qsmksi PTR_CALL 0000000000000000 00000000B ?
nline()+624 FFFFFFFF7FFF5400 ?
FFFFFFFF7FFF5120 ?
00000000B ? 00038001C ?
1035DC458 ?
qsmkzss_setup_summa CALL qsmkzii_init_qsmksi FFFFFFFF7CD12908 ?
ry()+480 nline()+0 000103000 ?
FFFFFFFF7CD93650 ?
000000000 ?
FFFFFFFF7CD93650 ?
103258100 ?
......

其中里面的ksedmpssexhdsigacthandler这三个函数在每一个ORA-07445 [0000000100E84B7C]类似的trace文件都存在,这是进行oracle异常处理的,一般不用管。 
stack的第一列的第四行的信息就是我们需要的信息:qsmkzii_init_qsmksinline,这个就是出错的函数名。
metalink根据这个函数名去查找,一般就可以知道错误的原因和是否有合适的方面来解决、避免这个错误。
如果根据第四行的函数名得不到有用的信息,可以尝试一下第五行的信息作为函数名,如果还是不能查到有用的信息,则可以认为metalink上没有这个错误的信息。

2ORA-00600
查找ORA-00600的关键信息比ORA-07445稍微简单,它相当于ORA-07445的第一种情况。
ORA-00600后一般跟着若干个由[]括起来的字符串,通常第一个被[]括起来的字符串就是我们需要的参数。
ORA-00600的报错信息在从alert文件和trace文件都存在,不过为了得到更多的信息,建议看trace文件。
一个ORA-00600trace文件类似下面:
*** SESSION ID:(22.3813) 2004-10-26 09:57:13.167
*** 2004-10-26 09:57:13.167
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [ttcgcshnd-1], [0], [], [], [], [], [], []
Current SQL statement for this session:
SELECT VALUE FROM NLS_INSTANCE_PARAMETERS WHERE PARAMETER =‘NLS_DATE_FORMAT‘
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedmp()+328 CALL ksedst()+0 FFFFFFFF7FFF9660 ?
000000000 ? 000000000 ?
00000003E ?
FFFFFFFF7FFF9EF8 ?
1031C9458 ?
kgerinv()+184 PTR_CALL 0000000000000000 000000000 ? 000103400 ?
0001035CD ? 000102C00 ?
1035CD000 ? 1035CD328 ?
kgeasnmierr()+28 CALL kgerinv()+0 1035CD588 ? 1036EDE38 ?
0000013C8 ? 000000001 ?
1035CF694 ? 1035CE958 ?
ttcgcshnd()+248 CALL kgeasnmierr()+0 1035CD588 ? 1036EDE38 ?
1033A2758 ? 000000001 ?
000000000 ? 000000000 ?
ttcc2u()+784 CALL ttcgcshnd()+0 1035CD588 ? 102DA4880 ?

上面的信息中,ttcgcshnd-1就是我们要找的第一个参数,也是查询的关键字。


3trace中其他有用的信息
ORA-00600ORA-07445trace文件都包含了一些其他的有用信息。
trace文件的PROCESS STATE部分,可以查看出错时SESSION的信息,包含主机名、那个用户执行的、用什么工具执行的等。
这些信息可能不太好找,查找方法是:从trace文件中找到PROCESS STATE,然后从PROCESS STATE往下找第一个"session"(关键字)出现的地方,这部分信息就包含我们需要的这些重要信息。

按照关键字"HOST"查可以得到客户端的IP

 


本文出自 “李鹏飞oracle” 博客,请务必保留此出处http://lipengfei666666.blog.51cto.com/6384154/1639686

如何查询ORA-07445 ORA-00600错误相关信息

标签:oracle   ora   

原文地址:http://lipengfei666666.blog.51cto.com/6384154/1639686

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!