java.sql.SQLException: 沒法從套接字讀取更多的數據

問題:

使用Java代碼鏈接Oracle執行SQL語句,報錯:java

SQL state [null]; error code [17410]; 沒法從套接字讀取更多的數據;nested exception is java.sql.SQLException: 沒法從套接字讀取更多的數據

可是將SQL語句放到navicat或者plsql上執行並無報錯。sql

問題探究:

查了網上相關文章,有說表空間不足的;有說oracle驅動包有問題的;有說jdbc驅動存在問題,換成odbc後解決的,但針對遇到的問題都沒有效果。
錯誤的無非就是兩個方向:一是Oracle數據庫方面,二是Java代碼方面。
數據庫

首先咱們來排查一下Oracle的日誌:
Oracle日誌分別放置於/oracle/oracle/diag/rdbms/rac/rac1/trac和/oracle/oracle/diag/rdbms/rac/rac1/alert目錄下,也可使用select name ,value from v$diag_info命令來查詢。
在這裏插入圖片描述
查看日誌:
在這裏插入圖片描述
經過翻看log.xml文件,咱們能夠看到詳細的日誌信息:
在這裏插入圖片描述
進入到/home/oracle/app/oracle/diag/rdbms/helowin/helowin/trace/路徑:






bash

more helowin_ora_28085.trc

在這裏插入圖片描述
到這裏咱們清楚的看到ORA-07445的報錯信息。
服務器

問題解決:

ORA-07445傳說中是由於Oracle的bug所致使的。
通常狀況下,ORA-600被證實爲oracle的內部錯誤,一般由oracle的bug引發,須要打oracle相應的補丁程序。而當oracle服務器進程從操做系統收到一個致命的錯誤信息時會拋出ora-07445錯誤,這個錯誤能夠被oracle後臺進程或者用戶進程激發。當錯誤被拋出時,系統會首先寫一個錯誤日誌到alert.log文件中,而後會寫跟蹤文件到user_dump_dest或background_dump_dest中;最後會將主存信息轉儲到core_dump_dest中。
操做系統有不少的非法操做設計,一個常常會碰到的狀況就是,當一個進程訪問一個非法地址(好比系統預留地址)時致命錯誤將會產生。
Ora-07445錯誤是一個很是普通的錯誤,可能在oracle的任何代碼中產生,該錯誤代碼更詳細的描述須要進一步跟蹤其跟蹤文件。


session

接下來的解決方案就簡單了,在數據庫級別執行如下sql,以設置隱含參數,便可避免出現此問題:oracle

alter system set "_optimizer_connect_by_cost_based" = false scope=both;

或者在session級別執行下列sql:app

alter session set "_optimizer_connect_by_cost_based" = false scope=both;

修改後從新啓動Oracle,原來的報錯就沒有了。spa

相關文章
相關標籤/搜索