ORACLE错误ora-2704607445?

ORA-07445和ORA-00600是系统内部错误,一般是由于BUG引起的,要解决或者避免这些错误一般需要到metalink上查。metalink甚至专门推出了一个工具用于这两个错误的查找。 与普通错误不同的是,ORA-07445和ORA-00600是一系列错误的总称,引起错误的原因可能成千上万个,如何快速、准确地找出到错误的原因是解决这类问题的难点。出现ORA-07445或ORA-00600错误时,一般都会产生一个trace文件,这个文件的路径和名称可以在alert文件中找到。这篇文章主要是谈谈如何在trace文件找找出关键信息。 1、ORA-07445 找出ORA-007445最关键是找出出错的函数名(这里的函数是指开发ORALCE的函数),然后根据函数名搜索错误原因及解决方法。ORA-07445后一般跟着若干个由[]括起来的字符串,通常第一个被[]括起来的字符串就是我们需要的函数名。ORA-07445的报错一般有两种:1)ORA-07445: exception encountered: core dump [lnxmin()+252] [SIGSEGV] [Address not mapped to object] [0x000000002] [] []这种情况很简单,第一个被[]括起来的字符串是lnxmin,这就是引发错误的函数名,我们根据这个信息去查就可以了。 2)ORA-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 hexlocation 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 ?......其中里面的ksedmp、ssexhd、sigacthandler这三个函数在每一个ORA-07445 [0000000100E84B7C]类似的trace文件都存在,这是进行oracle异常处理的,一般不用管。 stack的第一列的第四行的信息就是我们需要的信息:qsmkzii_init_qsmksinline,这个就是出错的函数名。在metalink根据这个函数名去查找,一般就可以知道错误的原因和是否有合适的方面来解决、避免这个错误。如果根据第四行的函数名得不到有用的信息,可以尝试一下第五行的信息作为函数名,如果还是不能查到有用的信息,则可以认为metalink上没有这个错误的信息。
2、ORA-00600查找ORA-00600的关键信息比ORA-07445稍微简单,它相当于ORA-07445的第一种情况。ORA-00600后一般跟着若干个由[]括起来的字符串,通常第一个被[]括起来的字符串就是我们需要的参数。ORA-00600的报错信息在从alert文件和trace文件都存在,不过为了得到更多的信息,建议看trace文件。一个ORA-00600的trace文件类似下面:*** SESSION ID:(22.3813) 2004-10-26 09:57:13.167*** 2004-10-26 09:57:13.167ksedmp: internal or fatal errorORA-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 hexlocation 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就是我们要找的第一个参数,也是查询的关键字。 3、trace中其他有用的信息在ORA-00600和ORA-07445的trace文件都包含了一些其他的有用信息。在trace文件的PROCESS STATE部分,可以查看出错时SESSION的信息,包含主机名、那个用户执行的、用什么工具执行的等。这些信息可能不太好找,查找方法是:从trace文件中找到PROCESS STATE,然后从PROCESS STATE往下找第一个"session"(关键字)出现的地方,这部分信息就包含我们需要的这些重要信息。 按照关键字"HOST"查可以得到客户端的IP

我要回帖

更多关于 ora-27046 的文章