一个Oracle9204上的小bug。
一个报表数据库中的alert文件中出现了ORA-7445错误:
Errors in file /u1/oracle/admin/repdb01/bdump/repdb01_j005_8887.trc:
ORA-07445: exception encountered: core dump [0000000100526C64] [SIGSEGV] [Address not mapped to object] [0x000000004] [] []
对应的trace文件为:
bash-2.03$ more /u1/oracle/admin/repdb01/bdump/repdb01_j005_8887.trc
/u1/oracle/admin/repdb01/bdump/repdb01_j005_8887.trc
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
ORACLE_HOME = /data/oracle/product/920
System name: SunOS
Node name: newreport
Release: 5.8
Version: Generic_117350-26
Machine: sun4u
Instance name: repdb01
Redo thread mounted by this instance: 1
Oracle process number: 23
Unix process pid: 8887, image: oracle@newreport (J005)
*** 2010-05-02 10:51:08.784
*** SESSION ID:(112.39159) 2010-05-02 10:51:08.744
Exception signal: 11 (SIGSEGV), code: 1 (Address not mapped to object), addr: 0x4, PC: [0x100526c64, 0000000100526C64]
*** 2010-05-02 10:51:08.787
ksedmp: internal or fatal error
ORA-07445: exception encountered: core dump [0000000100526C64] [SIGSEGV] [Address not mapped to object] [0x000000004] [] []
Current SQL statement for this session:
INSERT INTO AUD_ORDER_PERIOD
(ID,
PLAT_ID,
CONTRACT_ID,
BUYER_ORGID,
REQUEST_QTY,
TIME_FLAG,
TIME_COUNT,
CREATE_DATE)
SELECT S_AUD_ORDER_PERIOD.NEXTVAL,
PLAT_ID,
CONTRACT_ID,
BUYER_ORGID,
ORDER_MONEY,
TIME_FLAG,
TIME_COUNT,
SYSDATE
FROM (SELECT O.PLAT_ID,
L.CONTRACT_ID,
O.BUYER_ORGID,
SUM(NVL(O.REQUEST_QTY * O.UNIT_PRICE, 0)) ORDER_MONEY,
CASE
WHEN NVL(R.RECEIVE_DATE - O.CREATE_DATE, 0) * 24 <= 0.5 THEN
'1'
WHEN NVL(R.RECEIVE_DATE - O.CREATE_DATE, 0) * 24 <= 1 THEN
'2'
WHEN NVL(R.RECEIVE_DATE - O.CREATE_DATE, 0) * 24 <= 2 THEN
'3'
WHEN NVL(R.RECEIVE_DATE - O.CREATE_DATE, 0) * 24 <= 4 THEN
'4'
WHEN NVL(R.RECEIVE_DATE - O.CREATE_DATE, 0) * 24 <= 8 THEN
'5'
WHEN NVL(R.RECEIVE_DATE - O.CREATE_DATE, 0) * 24 <= 24 THEN
'6'
ELSE
'7'
END TIME_FLAG,
COUNT(1) TIME_COUNT
FROM CON_LIST_ITEM_SHARE_SJ L,
ORD_ORDER_ITEM_SJ O,
(SELECT R.ORDER_ITEM_ID, MIN(RECEIVE_DATE) RECEIVE_DATE
FROM ORD_ORDER_RECEIVE_SJ R
GROUP BY R.ORDER_ITEM_ID) R
WHERE O.SOURCE_ID = L.ID
AND O.RECORD_ID = R.ORDER_ITEM_ID(+)
GROUP BY O.PLAT_ID,
L.CONTRACT_ID,
O.BUYER_ORGID,
CASE
WHEN NVL(R.RECEIVE_DATE - O.CREATE_DATE, 0) * 24 <= 0.5 THEN
'1'
WHEN NVL(R.RECEIVE_DATE - O.CREATE_DATE, 0) * 24 <= 1 THEN
'2'
WHEN NVL(R.RECEIVE_DATE - O.CREATE_DATE, 0) * 24 <= 2 THEN
'3'
WHEN NVL(R.RECEIVE_DATE - O.CREATE_DATE, 0) * 24 <= 4 THEN
'4'
WHEN NVL(R.RECEIVE_DATE - O.CREATE_DATE, 0) * 24 <= 8 THEN
'5'
WHEN NVL(R.RECEIVE_DATE - O.CREATE_DATE, 0) * 24 <= 24 THEN
'6'
ELSE
'7'
END)
----- PL/SQL Call Stack -----
object line object
handle number name
69d8ece10 198 package body SHENJI2.PKG_GENERATE_STAT_SJ
6b3965e10 4 anonymous block
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedmp()+328 CALL ksedst()+0 FFFFFFFF7FFF16B0 ?
000000000 ? 000000000 ?
00000003E ?
FFFFFFFF7FFF1F48 ?
1031D56C8 ?
ssexhd()+604 CALL ksedmp()+0 000000000 ? 000103400 ?
0001035D9 ? 000102C00 ?
1035D9000 ? 1035D9C28 ?
sigacthandler()+44 PTR_CALL 0000000000000000 1035E1000 ?
FFFFFFFF7FFF2EE0 ?
000000000 ? 000000001 ?
1035DEDD8 ? 00000000B ?
ktussto()+740 PTR_CALL 0000000000000000 00000000B ?
FFFFFFFF7FFF2EE0 ?
FFFFFFFF7FFF2C00 ?
00000000B ? 000001A10 ?
000000000 ?
ktugct()+1348 CALL ktussto()+0 000000000 ? 000000000 ?
FFFFFFFF7CF60318 ?
FFFFFFFF7FFF3620 ?
1035DBF94 ? 000000000 ?
ktbgcl1()+2884 CALL ktugct()+0 103712B20 ?
FFFFFFFF7CF58274 ?
000000000 ?
FFFFFFFF7CF58274 ?
103712B34 ? 1035DC4E8 ?
ktrgcm()+3300 CALL ktbgcl1()+0 FFFFFFFF7CEE8CF0 ?
000000000 ?
FFFFFFFF7CF58274 ?
650AF4014 ? 650AF401C ?
000000002 ?
ktrget()+264 CALL ktrgcm()+0 650AF4014 ? 000000000 ?
1035D99AC ? 650AF404C ?
000002000 ? 000008000 ?
kdifxs()+1856 CALL ktrget()+0 FFFFFFFF7CEE8CF0 ?
FFFFFFFF7CEE8C00 ?
00000021B ?
FFFFFFFF7CEE8D00 ?
000100400 ? 1035DBF94 ?
qerixFetch()+280 CALL kdifxs()+0 000000001 ? 000000000 ?
000000000 ? 000000000 ?
FFFFFFFF7CEE8CE8 ?
000000000 ?
查询了一下METALINK,发现是Oracle的bug,Oracle被打算报ORA-1555错误,但是出现了会话的DUMP,导致ORA-7445(ktussto)错误的出现。
在METALINK文档ID 2454108.8中描述了这个bug,bug号2454108,确认影响版本就是9204。导致ORA-1555错误并不意外,由于每个月月初这个报表库有大量的后台JOB运行,因此个别JOB出现ORA-1555错误是很常见的,除了这个错误,alert文件中还有其他几个ORA-1555错误,不过出现这个ORA-7445(ktussto)错误倒是第一次。
这个错误影响不大,如果可以避免ORA-1555,也就避免了这个错误。Oracle在9205和10102中解决了这个bug。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-662100/ ,如需转载,请注明出处,否则将追究法律责任。