问题描述
Oracle11.2.0.4的DB,HPUX11.32的主机,运行着4个DB。
下午15:17分,有两个业务操作比较繁忙的DB同时报以下错误:
Exception [type: SIGILL, Illegal Operand] [ADDR:0x400000000652FC11] [PC:0x400000
000652FC11, pdx3Fz23_Insert_IL_Line()+113] [flags: 0x0, count: 1]
20分钟内,这个error产生的core file就有几十GB,导致要关DB 删core file
。但重开DB后又报错,将DB HA到另一主机才没报错。
专家解答
主要的错误信息,是以下的两个代码段:
ORA-07445: exception encountered: core dump [uwx_self_copyin()+1648] [SIGSEGV] [ADDR:0x9FFFFFFFBF5EFF30] [PC:0xC00000000087BA10]
ORA-07445: exception encountered: core dump [pdx3Fz23_Insert_IL_Line()+113] [SIGILL]
也就是:uwx_self_copyin 和 pdx3Fz23_Insert_IL_Line 两个函数调用。
请分析所有报错的跟踪文件,提取SQL语句,判断是否所有触发的SQL都类似:
----- Current SQL Statement for this session (sql_id=43fu7hg10ftga) -----
UPDATE WAS5001 SET REPORT_STATE=:1,UPDATE_DATE=sysdate WHERE REPORT_ID=:2 AND (REPORT_STATE < :3 OR REPORT_STATE is NULL)
如果是,重建这张表观察一下。
检查了incident file,并非都是对这个table。发现incident file中的SQL都是DML操作。当时用SQLPLUS connect DB后执行select system view操作是正常的。现在回想,可能只要是DML都会有这个错误,select是OK的。但如果说是system datafile的ITL有问题,DB switch到另一台主机,storage中datafile是带过去的,就没有这个error。
我的最终判断是:
这不是数据库的问题,是和运行时环境有关的问题。
比如CPU、内存,JAVA运行时环境。
我倾向于认为是硬件层面,比如CPU或内存上有问题,你注意检测一下硬件。