2011-05-24 46 views
6

昨天晚上,我離開辦公室時正在運行由我編寫的Java程序。它應該使用JDBC連接將很多記錄插入到我們公司的數據庫(Oracle)中。今天早上,當我回來工作,我看到這個錯誤(通過一個try-catch捕獲):SQLRecoverableException:I/O異常:連接重置

java.sql.SQLRecoverableException: I/O Exception: Connection reset 

該方案得到這個問題之前寫的幾乎所有記錄,但如果它發生早期(僅幾分鐘後,我晚上離開辦公室)?我不明白髮生了什麼事,我聯繫了我的數據庫管理員,他說數據庫沒有特別的問題。

關於發生了什麼以及我該怎麼做才能避免它?

回答

8

這只是意味着後端(DBMS)中的某些東西由於資源不可用而決定停止工作。 它與您的代碼或插入的數量無關。 您可以在此處詳細瞭解類似的問題:

這可能不是回答你的問題,但你會得到它爲什麼可能發生的事情的想法。你可以進一步與你的DBA討論,看看你的情況是否有特定的東西。

+0

我也建議磁盤空間檢查,對數據庫虛擬機給你的DBA一個可能的原因繼續。 df -h – saalehr 2015-07-01 12:54:30

1

你的例外說這一切「連接重置」。 你的java進程和數據庫服務器之間的連接丟失了,這可能是由於幾乎任何原因(如網絡問題)發生的。 SQLRecoverableException只是意味着它的可恢復性,但根本原因是連接重置。

4

我們在從11g升級到12c之後間歇性地遇到了這些錯誤,而我們的java版本是1.6。

我們此修復程序是以後從6升級Java和JDBC 7

export JAVA_HOME='/usr/java1.7' 

export CLASSPATH=/u01/app/oracle/product/12.1.0/dbhome_1/jdbc/libojdbc7.jar:$CLASSPATH 

幾天,還是間歇性連接復位。

我們最終刪除了上面的所有java 7。 Java 6很好。該問題已通過將此添加到我們的用戶bash_profile中解決。

我們遇到錯誤的groovy腳本是在批處理虛擬機服務器上使用/ dev/random。下面強制java和groovy使用/ dev/urandom。

出口JAVA_OPTS = 「$ JAVA_OPTS -Djava.security.egd =文件:///開發/ urandom的」

3

解決方案
更改設置爲你的應用程序,讓你這個參數[-Djava .security.egd =文件是:/ dev /../開發/ urandom的]旁邊的java命令:

的java -Djava.security.egd =文件是:/ dev /../開發/ urandom的 [你的命令]

Ref: - https://community.oracle.com/thread/943911

7

在某些RedHat發行版上發生錯誤。你需要做的唯一的事情就是運行與參數java.security.egd =文件應用程序:///開發/ urandom的

java -Djava.security.egd=file:///dev/urandom [your command]