ORA-07445 第一參数为:kkqljpmpr
在版本号11.2.0.1.0上,在pl/sql developer中运行一条SQL会导致连接中断,这样的错误要到trace文件夹下找到错误日志文件,再定位。查了一下资料,是这个版本号的bug。
Dump continued from file: d:\app\gcp\diag\rdbms\orcl\orcl\trace\orcl_ora_6040.trc
ORA-07445: 出现异常错误: 核心转储 [kkqljpmpr()+22] [ACCESS_VIOLATION] [ADDR:0x78] [PC:0x56341C6] [UNABLE_TO_READ] []
========= Dump for incident 24395 (ORA 7445 [kkqljpmpr()+22]) ========
----- Beginning of Customized Incident Dump(s) -----
Exception [type: ACCESS_VIOLATION, UNABLE_TO_READ] [ADDR:0x78] [PC:0x56341C6, kkqljpmpr()+22]
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
Process Id: 0x000020f4 Thread Id : 0x00001798 Time : Mon Dec 15 18:26:51
Excp. Code: 0xc0000005 Excp. Type: ACCESS_VIO Flags: 0x00000000
------------------- Registers ----------------------------
ip=00000000056341C6 sp=000000002A0A5C80 rp=0000000000000000
r1=00000000292C1640 r2=00000000292C1640 r3=000000002933E9B0
r4=00000000292C1640 r5=000000002A0A5C80 r6=0000000000000000 r7=0000000000020B78
r8=0000000000000000 r9=00000000292CFD60 r10=0000000000000000 r11=0000000000000002
r12=0000000000000005 r13=0000000029348ED0 r14=0000000000000001 r15=00000000292C1640
------------------- End of Registers ---------------------
*** 2014-12-15 18:26:51.745
dbkedDefDump(): Starting a non-incident diagnostic dump (flags=0x3, level=3, mask=0x0)
----- Current SQL Statement for this session (sql_id=gsak3fq15mt5b) -----
with
dt2 as (select count(1) over() total$,1 null_flag_,row_number() over(order by null) rn,
T2.ID factor1,
T1.ID CN_1,
T1.BUREAU_CODE CN_2,
T1.DEVICE_CODE CN_3
from DM_DEVICE T1,SP_PD_DEFECT T2
where T1.ID=T2.DEVICE_ID
and 1=1
and rownum <= 10),
sc as (select row_number() over(order by null) rn,
COUNT(DISTINCT factor1) factor1
from dt2 dt
where 1=1
GROUP BY 1),
cal as (select row_number() over(order by max(rn),grouping(1)) rn,grouping(1) gp,
max(factor1) C_0_1
from sc
group by rollup(1))
select max(dt.total$) over() total$,row_number() over(order by cal.rn,dt.rn) rn,gp,
case when gp = 1 then cal.C_0_1 end C_0_1,
dt.CN_1,
dt.CN_2,
dt.CN_3
from cal
left join dt2 dt
on gp=0 and dt.rn <= 5000
where gp = 1 or (gp = 0 and dt.null_flag_ is not null)
order by cal.rn,dt.rn
这是一个bug。假设不改SQL的话。仅仅有通过打补丁的方式解决。