Caused by: java.sql.SQLException: 無法從套接字讀取更多的資料

隨風映雪發表於2020-09-01

       最近一個月從兩個不同的地方碰到了相同的報錯,更加巧合的是相關人員都執行了相同的引數修改,並且其中一個客戶因隨意修改引數導致資料庫的大量sql執行計劃抖動,應用受到極大影響。。

報錯如下:Caused by: java.sql.SQLException: 無法從套接字讀取更多的資料

這個報錯為前端應用報錯,因為報錯太明確了,所以猜測他們都直接搜尋,然後就直接用了,修改的引數為

_optimizer_connect_by_cost_based



這邊一定要注意,修改oracle的隱含引數一定要謹慎,尤其是_optimizer開頭的和優化器相關的引數,稍有不慎,就會出現開頭出現的情況。 並且實際上修改完這個引數後,並沒有用處


這個報錯一直在前臺持續,對應的時間點alert日誌中顯示如下:

Dump continued from file: /u01/app/oracle/diag/rdbms/XX/XX/XXX_ora_1466.trc
ORA-07445: 出現異常錯誤: 核心轉儲 [evaopn3()+135] [SIGSEGV] [ADDR:0x4] [PC:0x98244A7] [Address not mapped to object] []


檢視這個trc檔案,可以找到引發這個報錯的sql。

ORA-7445這種建議在官方文件中搜尋資料,大部分情況都有收錄,找到對應的 Doc ID 22611354.8 AND Doc ID 1943615.1

可以確認這是一個bug,官方建議修改引數為

不過在確認sql的情況下,我們基本上不會在資料庫級別去該引數。我們會通過hint的方式,在sql級別去應用,如下所示:

如果是create table ,那麼加上

/*+ OPT_PARAM('_pred_move_around','FALSE') */

如果是select查詢,那麼加上

/*+OPT_PARAM('_optimizer_join_elimination_enabled' 'false')*/


然後通知開發修改應用的sql,達成目的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31404823/viewspace-2716307/,如需轉載,請註明出處,否則將追究法律責任。

相關文章