ORA-00600[17059]錯誤

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) > 0
select

錯誤分析:程序

一、數據庫中del_flag是char(1)插入的參數是number方法

二、以前的參數是字符串拼接進去的,改正後是經過參數形式傳入的數據

具體是哪一種緣由致使的須要進一步驗證!升級

下面是網上找到的解決該問題的一些方法。

解決該問題 1.不要經過程序拼接sql出來,使用綁定參數形式 2.升級到相應新版本解決該問題 3.一次減小執行的sql數量,定時刷新shared pool[臨時辦法]

相關文章
相關標籤/搜索