在alert文件中发现了这个错误。
错误信息为:
Errors in file /u1/oracle/admin/repdb01/udump/repdb01_ora_10600.trc:
ORA-07445: exception encountered: core dump [0000000100A2E0F4] [SIGSEGV] [Address not mapped to object] [0x000000008] [] []
对应的trace文件信息为:
ksedmp: internal or fatal error
ORA-07445: exception encountered: core dump [0000000100A2E0F4] [SIGSEGV] [Address not mapped to object] [0x000000008] [] []
Current SQL statement for this session:
INSERT INTO SYS.JOB$ ( JOB,LOWNER,POWNER,COWNER,NEXT_DATE,INTERVAL#,FLAG,WHAT,NLSENV,ENV ) VALUES ( :b1,:b2,:b3,:b4,NVL(:b5,TO_DATE
('4000-01-01','YYYY-MM-DD')),NVL(:b6,'null'),:b7,:b8,:b9,:b10 )
----- PL/SQL Call Stack -----
object line object
handle number name
69817eee0 210 package body SYS.DBMS_IJOB
6aba32d10 150 package body SYS.DBMS_JOB
6ae481538 2 anonymous block
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedmp()+328 CALL ksedst()+0 FFFFFFFF7FFF5630 ?
000000000 ? 000000000 ?
00000003E ?
FFFFFFFF7FFF5EC8 ?
1031D56C8 ?
ssexhd()+604 CALL ksedmp()+0 000000000 ? 000103400 ?
0001035D9 ? 000102C00 ?
1035D9000 ? 1035D9C28 ?
sigacthandler()+44 PTR_CALL 0000000000000000 1035E1000 ?
FFFFFFFF7FFF6E60 ?
000000000 ? 000000001 ?
1035DEDD8 ? 00000000B ?
kxscbb()+84 PTR_CALL 0000000000000000 00000000B ?
FFFFFFFF7FFF6E60 ?
FFFFFFFF7FFF6B80 ?
00000000B ? 000000076 ?
000000000 ?
kxspoac()+620 CALL kxscbb()+0 FFFFFFFF7CE7CB80 ?
000000000 ?
FFFFFFFF7CE7B8C8 ?
000000018 ? 000000FA0 ?
000000000 ?
opipls()+2824 CALL kxspoac()+0 FFFFFFFF7CEAD340 ?
FFFFFFFF7CE7B8C8 ?
1036B53D8 ?
FFFFFFFF7CE7CB80 ?
000000010 ? 69E4A2CC8 ?
opiodr()+1692 PTR_CALL 0000000000000000 00000000A ? 000000001 ?
FFFFFFFF7CF7C2E8 ?
00000000A ? 000000017 ?
1035D9FC8 ?
错误发生在Oracle将JOB信息插入到JOB$表中,这个语句应该是用户执行DBMS_JOB.SUBMIT过程触发的。
检查随后的日志信息,发现是同事通过PLDEVELOPER工具在运行一个JOB。由于同事已经下班,因此只是电话简单沟通了一下,并确认JOB已经运行成功。看来这个bug的影响不是很大。
随后查询了一下metalink,看了很多的kxscbb参数相关的错误描述,感觉问题可能与Doc ID: 268505.1或Doc ID: 3315960.8文档中描述的比较接近。但是由于不清楚当时出错时的具体信息,因此很难下结论。
等到今天碰到同事详细的问了一下当时的情况,就基本上断定了正是上面两篇文章中描述的情况。由于要执行一个一次性的JOB,因此同事选择使用匿名块的方式,而没有建立存储过程。开始的时候,他将几个表的访问代码放在了一起,导致WHAT参数输入的字符串超长而报错,这里的错误显然就是ORA-1461,于是第二次使用DBMS_JOB.SUBMIT过程时,虽然输入参数这次满足要求了,但是引发上上面的bug。
Oracle给出的解决方法也很简单,设置cursor_space_for_time初始化参数为TRUE,或者打3315960的补丁。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-611827/ ,如需转载,请注明出处,否则将追究法律责任。