ORA-00600[17059]sql
ORA-00600[17059]錯誤大部分都是由於高版本致使,對於本庫的分析:由於該庫的 shared pool老化比較頻繁,到我介入的時候,發現相關該類此sql已經不能找到,不能很是確定的找出來緣由,猜想可能緣由是:這個庫(版本爲11.1.0.6 FOR AIX)由於開發基本上沒有綁定參數,設置cursor_sharing=force,這裏5萬多條的insert會自動轉換爲參數形式,由於每一個 insert參數對應的值長度區別較大,使得BIND_MISMATCH不匹配致使高版本現象嚴重,從而出現了該Bug 9689310.數據庫
出錯的sql:spa
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) > 0select
錯誤分析:程序
一、數據庫中del_flag是char(1)插入的參數是number方法
二、以前的參數是字符串拼接進去的,改正後是經過參數形式傳入的數據
具體是哪一種緣由致使的須要進一步驗證!升級
下面是網上找到的解決該問題的一些方法。
解決該問題 1.不要經過程序拼接sql出來,使用綁定參數形式 2.升級到相應新版本解決該問題 3.一次減小執行的sql數量,定時刷新shared pool[臨時辦法]