ORA-00600[17059]
ORA-00600[17059]错误大部分都是因为高版本导致,对于本库的分析:因为该库的 shared pool老化比较频繁,到我介入的时候,发现相关该类此sql已经不能找到,不能非常肯定的找出来原因,猜测可能原因是:这个库(版本为11.1.0.6 FOR AIX)因为开发基本上没有绑定参数,设置cursor_sharing=force,这里5万多条的insert会自动转换为参数形式,因为每个 insert参数对应的值长度区别较大,使得BIND_MISMATCH不匹配导致高版本现象严重,从而出现了该Bug 9689310.
出错的sql:
select *
from ap_alarm_msg_t
where alarm_rule_id =
:alarm_rule_id
and alarm_sub_type_id =
:alarm_sub_type_id
and alarm_do_type =
:alarm_do_type
and mail_to = :mail_to
and del_flag = 0
and
instr(alarm_message, :alarm_message_start) > 0
and
instr(alarm_message, :alarm_message_end) > 0
改正后sql:
select
*
from
ap_alarm_msg_t
where alarm_rule_id =
:alarm_rule_id
and alarm_sub_type_id =
:alarm_sub_type_id
and alarm_do_type =
:alarm_do_type
and mail_to =
:mail_to
and del_flag =
:del_flag
and instr(alarm_message, :alarm_message_start) >
0
and instr(alarm_message, :alarm_message_end) > 0
错误分析:
1、数据库中del_flag是char(1)插入的参数是number
2、之前的参数是字符串拼接进去的,改正后是通过参数形式传入的
具体是哪种原因导致的需要进一步验证!
下面是网上找到的解决该问题的一些方法。
解决该问题
1.不要通过程序拼接sql出来,使用绑定参数形式
2.升级到相应新版本解决该问题
3.一次减少执行的sql数量,定时刷新shared pool[临时办法]
ORA-00600[17059]错误,布布扣,bubuko.com
原文:http://www.cnblogs.com/zynbg/p/3663421.html