ORA-7445(kkfipbr)错误

在客户的10.2.0.4 RAC for X86-64环境中碰到了这个错误。
错误信息为:

Fri Apr 27 13:40:20 2012
Errors IN file /opt/app/oracle/admin/ora/udump/ora1_ora_1851.trc:
ORA-07445: exception encountered: core dump [kkfipbr()+8] [SIGSEGV] [Address NOT mapped TO object] [0x000000000] [] []

对应的TRACE文件内容为:

*** 2012-04-27 13:40:20.422
ksedmp: internal OR fatal error
ORA-07445: exception encountered: core dump [kkfipbr()+8] [SIGSEGV] [Address NOT mapped TO object] [0x000000000] [] []
CURRENT SQL statement FOR this SESSION:
SELECT * FROM (SELECT pagetable.*,rownum recordid FROM (SELECT s.id sid,p.id pid,p.name pname,WHERE rownum <= 7) WHERE recordid >0
----- Call Stack Trace -----
calling              CALL     entry                argument VALUES IN hex      
location             TYPE     point                (? means dubious VALUE)     
-------------------- -------- -------------------- ----------------------------
ksedst()+31          CALL     ksedst1()            000000000 ? 000000001 ?
                                                   2A97153D50 ? 2A97153DB0 ?
                                                   2A97153CF0 ? 000000000 ?
ksedmp()+610         CALL     ksedst()             000000000 ? 000000001 ?
                                                   2A97153D50 ? 2A97153DB0 ?
                                                   2A97153CF0 ? 000000000 ?
ssexhd()+629         CALL     ksedmp()             000000003 ? 000000001 ?
                                                   2A97153D50 ? 2A97153DB0 ?
                                                   2A97153CF0 ? 000000000 ?
__funlockfile()+64   CALL     ssexhd()             00000000B ? 2A97154D70 ?
                                                   2A97154C40 ? 2A97153DB0 ?
                                                   2A97153CF0 ? 000000000 ?
kkfipbr()+8          signal   __funlockfile()      2A976A69B8 ? 000000000 ?
                                                   7FBFFF7C10 ? 000000038 ?
                                                   000000000 ? 000000000 ?
kkfiPatchQbc()+235   CALL     kkfipbr()            2A976A69B8 ? 000000000 ?
                                                   7FBFFF7C10 ? 000000038 ?
                                                   000000000 ? 000000000 ?
qkadrv()+554         CALL     kkfiPatchQbc()       2A976A69B8 ? 000000000 ?
                                                   7FBFFF7C10 ? 000000038 ?
                                                   000000000 ? 000000000 ?
qkadrv()+6219        CALL     qkadrv()             2A972E9D08 ? 000000001 ?
                                                   7FBFFF7C10 ? 000000038 ?
                                                   000000000 ? 000000000 ?
opitca()+1875        CALL     qkadrv()             2A972EAAB8 ? 000000001 ?
                                                   7FBFFF7C10 ? 000000038 ?
                                                   000000000 ? 000000000 ?
kksLoadChild()+9360  CALL     opitca()             2A9779FF20 ? 319327A70 ?
                                                   7FBFFF7C10 ? 000000038 ?
                                                   000000000 ? 000000000 ?
kxsGetRuntimeLock()  CALL     kksLoadChild()       0067B4700 ? 259299DD8 ?
+1353                                              7FBFFFA4D0 ? 000000000 ?
                                                   30DD70C10 ? 2A9779FF20 ?
kksfbc()+15084       CALL     kxsGetRuntimeLock()  0067B4700 ? 2A9779FF20 ?
                                                   7FBFFFA4D0 ? 000000000 ?
                                                   30DD70C10 ? 2A9779FF20 ?
kkspsc0()+1548       CALL     kksfbc()             2A9779FF20 ? 000000003 ?
                                                   000000108 ? 2A975D2188 ?
                                                   00000070D ? 000000000 ?
kksParseCursor()+14  CALL     kkspsc0()            2A97311D08 ? 2A975D2188 ?
2                                                  00000070D ? 000000003 ?
                                                   300A400000006 ? 0000300A4 ?
opiosq0()+1641       CALL     kksParseCursor()     7FBFFFAF18 ? 2A975D2188 ?
                                                   00000070D ? 000000003 ?
                                                   300A400000006 ? 0000300A4 ?
kpooprx()+315        CALL     opiosq0()            000000003 ? 00000000E ?
                                                   7FBFFFB108 ? 0000000A4 ?
                                                   300A400000006 ? 0000300A4 ?
kpoal8()+799         CALL     kpooprx()            7FBFFFE2B4 ? 2A975D2188 ?
                                                   00000070C ? 000000001 ?
                                                   000000000 ? 0000300A4 ?
opiodr()+984         CALL     kpoal8()             00000005E ? 000000017 ?
                                                   7FBFFFE2B0 ? 000000001 ?
                                                   000000001 ? 0000300A4 ?
ttcpip()+1012        CALL     opiodr()             00000005E ? 000000017 ?
                                                   7FBFFFE2B0 ? 000000000 ?
                                                   0059DF750 ? 0000300A4 ?
opitsk()+1322        CALL     ttcpip()             0067BC3D0 ? 000000003 ?
                                                   7FBFFFE2B0 ? 000000000 ?
                                                   7FBFFFDDA8 ? 7FBFFFE418 ?
opiino()+1026        CALL     opitsk()             000000003 ? 000000000 ?
                                                   7FBFFFE2B0 ? 000000001 ?
                                                   000000000 ? 683197600000001 ?
opiodr()+984         CALL     opiino()             00000003C ? 000000004 ?
                                                   7FBFFFF478 ? 000000000 ?
                                                   000000000 ? 683197600000001 ?
opidrv()+547         CALL     opiodr()             00000003C ? 000000004 ?
                                                   7FBFFFF478 ? 000000000 ?
                                                   0059DF200 ? 683197600000001 ?
sou2o()+114          CALL     opidrv()             00000003C ? 000000004 ?
                                                   7FBFFFF478 ? 000000000 ?
                                                   0059DF200 ? 683197600000001 ?
opimai_real()+163    CALL     sou2o()              7FBFFFF450 ? 00000003C ?
                                                   000000004 ? 7FBFFFF478 ?
                                                   0059DF200 ? 683197600000001 ?
main()+116           CALL     opimai_real()        000000002 ? 7FBFFFF4E0 ?
                                                   000000004 ? 7FBFFFF478 ?
                                                   0059DF200 ? 683197600000001 ?
__libc_start_main()  CALL     main()               000000002 ? 7FBFFFF4E0 ?
+219                                               000000004 ? 7FBFFFF478 ?
                                                   0059DF200 ? 683197600000001 ?
_start()+42          CALL     __libc_start_main()  0007139F8 ? 000000002 ?
                                                   7FBFFFF628 ? 0052B4BD0 ?
                                                   000000000 ? 000000002 ?
--------------------- Binary Stack Dump ---------------------

导致错误的原因是由于SQL语句中出现了ROWNUM,因此Oracle尝试使用FIRST_ROW_N优化模式来进行CBO执行计划的评估,并导致了错误。Oracle在文档Bug 7378625 – Assorted Dumps and Wrong Results from first_rows_k optimization [ID 7378625.8]对这个问题进行了描述。
该问题确认影响10.2.0.4和11.1.0.7版本,并在11.2.0.1和10.2.0.5中进行了解决。除了按照补丁外,对于出现ROWNUM的查询情况,可以考虑设置隐含参数_optimizer_rownum_pred_based_fkr为FALSE来解决。

This entry was posted in BUG and tagged , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *