2011-05-24 30 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]