我有一个连接到oracle数据库的java程序,有时它工作,有时会显示这个错误信息:
线程“main”中的异常java.sql.SQLRecoverableException:IO错误:连接重置
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:498)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)
我如何解决这个问题?
答案 0 :(得分:6)
来自oracle论坛的答案here:
java.security.SecureRandom
是sun提供的标准API。在此类void nextBytes(byte[])
提供的各种方法中。
此方法用于生成随机字节。 Oracle 11g JDBC驱动程序使用此API在期间生成随机数
登录。使用Linux的用户遇到SQLException("Io exception: Connection reset")
。
问题有两个:
JVM尝试列出/ tmp(或-Djava.io.tmpdir设置的备用tmp目录)中的所有文件
调用SecureRandom.nextBytes(byte[])
。如果文件数量很大的话
方法需要很长时间
响应并因此导致服务器超时
方法void nextBytes(byte[])
在Linux和缺少随机的一些机器上使用/ dev / random
数字生成硬件操作减慢到整个登录过程的程度
停了下来。最终用户遇到SQLException(&#34; Io异常:
连接重置&#34;)
如果底层操作系统是在故障硬件上运行的Linux,则升级到11g的用户可能会遇到此问题。
其原因尚未确切确定。它可能是硬件问题或事实
由于某种原因,该软件无法从dev/random
解决方案似乎将此设置添加到jvm
-Djava.security.egd=file:/dev/./urandom
答案 1 :(得分:-1)
当应用程序与数据库之间的连接断开连接时,通常会发生连接重置,例如网络问题或所需的资源。
检查以下帖子,它应该让您知道要检查的内容。 SQLRecoverableException: I/O Exception: Connection reset