ORA-00600[17059]错误

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[临时办法]

转载于:https://www.cnblogs.com/zynbg/p/3663421.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值