ORA-07445: 出現異常錯誤: 核心轉儲 [plcurClose()+40] [SIGSEGV]

parknkjun發表於2015-01-26
1.環境介紹
DB版本:Oracle 11g 11.2.0.3 64位
OS版本:  IBM AIX 6.1 64位
2.現象
Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x424C455F51545A0C] [PC:0x102618AA8, plcurClose()+40] [flags: 0x0, count: 1]
Errors in file /u01/oracle/diag/rdbms/jzh/jzh2/trace/jzh2_j012_6095470.trc  (incident=492774):
ORA-07445: 鍑虹幇寮傚父閿欒?: 鏍稿績杞?偍 [plcurClose()+40] [SIGSEGV] [ADDR:0x424C455F51545A0C] [PC:0x102618AA8] [Address not mapped to object] []
Incident details in: /u01/oracle/diag/rdbms/jzh/jzh2/incident/incdir_492774/jzh2_j012_6095470_i492774.trc
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
其實從標紅字型大概可以看出是與plsql,cursor close有關,也就是在plsql塊中關閉遊標有關,接下檢視jzh2_j012_6095470_i492774.trc檔案內容:
Dump continued from file: /u01/oracle/diag/rdbms/jzh/jzh2/trace/jzh2_j012_6095470.trc
ORA-07445: 出現異常錯誤: 核心轉儲 [plcurClose()+40] [SIGSEGV] [ADDR:0x424C455F51545A0C] [PC:0x102618AA8] [Address not mapped to object] []
========= Dump for incident 492774 (ORA 7445 [plcurClose()+40]) ========
----- Beginning of Customized Incident Dump(s) -----
Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x424C455F51545A0C] [PC:0x102618AA8, plcurClose()+40] [flags: 0x0, count: 1]
Registers:
iar: 0x0000000102618aa8  lr: 0x0000000101ba9bb0
msr: 0xa00000000200d032  cr: 0x0000000042242048
r00: 0x0000000000000011 r01: 0x0fffffffffffc0e0 r02: 0x00000001106597d8
r03: 0x0000000110000250 r04: 0x0000000000000020 r05: 0x0000000000000011
r06: 0x0000000000000011 r07: 0x424c455f5154592c r08: 0x0000000110a82a68
r09: 0x0000000000000000 r10: 0x0700001b6f6910e8 r11: 0x0000000000000000
r12: 0x0000000048248044 r13: 0x00000001106cbc00 r14: 0x0000000000000001
r15: 0x0ffffffffffff578 r16: 0x0ffffffffffff588 r17: 0x0800200140000000
r18: 0x0ffffffffffffed0 r19: 0x0000000000000000 r20: 0x0000000000000000
r21: 0x0000000109d5aba8 r22: 0x0000000110bbeb98 r23: 0x0000000000000000
r24: 0x0000000110878e88 r25: 0x0000000110878f30 r26: 0x0000000110dd9a70
r27: 0x0000000000000028 r28: 0x0000000000000028 r29: 0x0000000000000012
r30: 0x00000012000200eb r31: 0x0000000110b97908 


*** 2014-12-26 16:02:35.800
dbkedDefDump(): Starting a non-incident diagnostic dump (flags=0x3, level=3, mask=0x0)
----- SQL Statement (None) -----
Current SQL information unavailable - no cursor.


----- Call Stack Trace -----
calling              call     entry                argument values in hex      
location             type     point                (? means dubious value)     
-------------------- -------- -------------------- ----------------------------
skdstdst()+40        bl       107c4a874            000000000 ? 000000001 ?
                                                   000000003 ? 000000001 ?
                                                   000000000 ? 000000001 ?
                                                   000000003 ? 000000001 ?
ksedst1()+112        call     skdstdst()           13B35D5BA86695DA ?
                                                   4824384100000000 ?
                                                   110844E30 ? 000002004 ?
                                                   1106CFD00 ? 10A389A84 ?
                                                   000000000 ? 1106CFD00 ?
ksedst()+40          call     ksedst1()            30300000000 ? 002050033 ?
                                                   10A389A78 ? 7000000000262 ?
                                                   000000000 ? 000000000 ?
                                                   10A389078 ? 000000000 ?
dbkedDefDump()+1516  call     ksedst()             000000005 ? 110000B14 ?
                                                   000000000 ? 110000B14 ?
                                                   E000000000000000 ?
                                                   000000000 ? 000000000 ?
                                                   300000003 ?
ksedmp()+72          call     dbkedDefDump()       300000000 ? 030623937 ?
                                                   102618AA8 ? 000000001 ?
                                                   00000000B ? 110845B10 ?
                                                   110845DC0 ? 000000001 ?
ssexhd()+2672        call     ksedmp()             109E0CBF0 ? 200000002 ?
                                                   000000004 ? 000000000 ?
                                                   000000004 ? 000000001 ?
                                                   073652829 ? 000000004 ?
48bc                 call     ssexhd()             000000000 ? 000000000 ?
                                                   000000000 ? 000000000 ?
                                                   000000000 ? 000000000 ?
                                                   000000000 ? 000000000 ?
kgscReleaseACursor(  call     48bc                 700001AE12B25F8 ? 000000000 ?
)+716                                              FFFFFFFFFFFC550 ?
                                                   700001A0BA36A10 ?
                                                   FFFFFFFFFFFFFFFF ?
                                                   10B0B0448 ? 000000001 ?
                                                   000000001 ?
kgscReleaseCursorGr  call     kgscReleaseACursor(  FFFFFFFFFFFC550 ? 000057E40 ?
oup()+288                     )                    110A82A68 ? 110BBEB98 ?
                                                   12000200EB ? 2C00000028 ?
                                                   FFFFFFFFFFFC560 ?
                                                   FFFFFFFFFFFC470 ?
標紅字型就是釋放遊標的地方,也就是出錯的地方,接著往下看:

========== FRAME [7] (48bc -> ssexhd()) ==========
defined by frame pointers 0xfffffffffffc330  and 0x110845aa0
CALL TYPE: call   ERROR SIGNALED: yes   COMPONENT: (null)
Dump of memory from 0xfffffffffffc330 to 0xfffffffffffc730
FFFFFFFFFFFC330 0FFFFFFF FFFFC400 0FFFFFFF FFFFC200  [................]
FFFFFFFFFFFC340 00000001 01BA9BB0 00000001 106CBC00  [.............l..]
FFFFFFFFFFFC350 0FFFFFFF FFFFC430 00000001 106597D8  [.......0.....e..]
FFFFFFFFFFFC360 0700001A E12B25F8 00000000 00000000  [.....+%.........]
FFFFFFFFFFFC370 0FFFFFFF FFFFC550 0700001A 0BA36A10  [.......P......j.]
FFFFFFFFFFFC380 FFFFFFFF FFFFFFFF 00000001 0B0B0448  [...............H]
FFFFFFFFFFFC390 00000000 00000001 00000000 00000001  [................]
FFFFFFFFFFFC3A0 0700001A 0BA36A08 00000000 00000000  [......j.........]
FFFFFFFFFFFC3B0 00000001 09D5ABA8 00000000 00000000  [................]
FFFFFFFFFFFC3C0 00000000 00000B22 07000000 00003668  [......."......6h]
FFFFFFFFFFFC3D0 00000001 10000218 00000001 10BBEBC0  [................]
FFFFFFFFFFFC3E0 00000000 00000028 00000000 00000003  [.......(........]
FFFFFFFFFFFC3F0 00000000 00000000 00000001 10A6FA60  [...............`]
FFFFFFFFFFFC400 0FFFFFFF FFFFC4B0 00000000 00000000  [................]
FFFFFFFFFFFC410 00000001 01BA9884 00000001 10000250  [...............P]
FFFFFFFFFFFC420 00000000 00002000 00000000 00072000  [...... ....... .]
FFFFFFFFFFFC430 0FFFFFFF FFFFC550 00000000 00057E40  [.......P......~@]
FFFFFFFFFFFC440 00000001 10A82A68 00000001 10BBEB98  [......*h........]
FFFFFFFFFFFC450 00000012 000200EB 0000002C 00000028  [...........,...(]
FFFFFFFFFFFC460 0FFFFFFF FFFFC560 0FFFFFFF FFFFC470  [.......`.......p]
從標紅字型來看,證明了上面的判斷是對的,該錯誤是由於在 plsql中釋放遊標的出現的錯誤。

mos上找到一篇文章解釋如下:

APPLIES TO:

Oracle Database - Enterprise Edition - Version 11.2.0.2.0 and later
Information in this document applies to any platform.

SYMPTOMS

Processes that have run PLSQL blocks may fail at session cleanup with:

ORA-07445: exception encountered: core dump [plcurClose()+24] [SIGBUS] [ADDR:0xDF] [PC:0x108C070F8] [Invalid address alignment] []

From the trace, it can be identified if the process was deleted and that the error was reported at cleanup by seeing the DEL flag:
flags: (0x8000041) USR/- flags_idl: (0x21) BSY/-/-/DEL/-/-

Review of the generated tracefiles reveals a call stack similar to:

plcurClose

CAUSE

This is due to - ORA-07445 [PLCURCLOSE()+24] AT SESSION CLEANUP 
closed as a duplicate of
Unpublished Bug:11786776 HIT ORA-07445 [PLCURCLOSE()+27] WHEN RUNNING MIXED WORKLOAD

SOLUTION

Apply  LNX64-RAC HIT ORA-07445 [PLCURCLOSE()+27] WHEN RUNNING MIXED WORKLOAD if available for your version and platform.

If the patch is not available on the My Oracle Support portal, open a Service Request with Oracle Support asking for a patch providing the relevant traces and justifications.

這是一個bug,bug號是11786776,在11.2.0.4中得到修復,詳細見 文件 ID 11786776.8

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10271187/viewspace-1415141/,如需轉載,請註明出處,否則將追究法律責任。

相關文章