Oracle 11g连接重置错误

时间:2013-03-17 19:06:09

标签: java sockets networking jdbc oracle11g

在使用瘦jdbc驱动程序尝试连接到Red Hat Linux上的Oracle 11g时,看到以下错误。如果有人能够更多地了解如何解决这个问题,我们将非常感激。

 Caused by: java.net.SocketException: Connection reset
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
    at oracle.net.ns.DataPacket.send(DataPacket.java:199)
    at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:211)
    at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:227)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:175)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:100)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:85)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:123)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:79)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1122)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1099)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:288)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:366)
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:752)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:366)

7 个答案:

答案 0 :(得分:15)

我们有一些非常相似的东西,将程序从32位移动到64位OS&许多并发进程会引发IO错误:连接重置。

偶然发现了这个问题:

https://community.oracle.com/message/3701989

基本上添加-Djava.security.egd = file:/ dev /./ urandom参数,这样做很好:)

答案 1 :(得分:7)

我遇到了与Sqoop Oracle导入相似的问题,我已经实现了此link建议的修复

此设置有助于解决问题:

-Dmapred.child.java.opts="-Djava.security.egd=file:///dev/urandom"

我将mapred-site.xml配置属性名称值更改为:

mapreduce.admin.map.child.java.opts -Djava.security.egd=file:///dev/urandom

这有点特定于sqoop,但我认为设置JVM选项 -Djava.security.egd=file:///dev/urandom" 将帮助您解决问题。

答案 2 :(得分:6)

您没有包含问题的任何细节,例如更改了什么?这是您的新配置还是突然停止工作?你知道你有足够的连接吗?这种情况是发生在每个连接上还是间歇性的?

考虑到登录过程中发生的错误,有几种可能性:

  1. 网络故障
  2. 您已经耗尽了最多的连接数,因此Oracle会挂断您。
  3. 防火墙限制
  4. 数据库服务器或侦听器的问题。为您的会话提供服务的处理可能会在打开后崩溃。
  5. 检查以下stackoverflow线程,了解如何检查活动连接数和最大值。如果这是问题,我会期望“ORA-00018:超出最大会话数”错误,因此可能不是。但值得一试。

    How to check the maximum number of allowed connections to an Oracle database?

答案 3 :(得分:2)

由于堆栈未指示任何ORA,因此存在潜在的网络问题。

答案 4 :(得分:1)

导致我出现此问题的其他因素是 HOSTNAME 设置错误。我的连接尝试被绞死:

"main" prio=10 tid=0x00007f7cc8009000 nid=0x2f3a runnable [0x00007f7cce69e000]
   java.lang.Thread.State: RUNNABLE
        at java.net.Inet4AddressImpl.getLocalHostName(Native Method)
        at java.net.InetAddress.getLocalHost(InetAddress.java:1444)
        at sun.security.provider.SeedGenerator$1.run(SeedGenerator.java:176)
        at sun.security.provider.SeedGenerator$1.run(SeedGenerator.java:162)
        at java.security.AccessController.doPrivileged(Native Method)

因此,请确保您在/etc/hosts/中有一个主机名条目。

如果你发出这样的hostname命令:

$ hostname
my.server.com

您需要/etc/hosts中的一行:

127.0.0.1 my my.server.com

答案 5 :(得分:0)

有同样的问题 - Linux(有时)失败,在Windows上工作(总是)。

了解这些网站上的原因(和解决方案):

答案 6 :(得分:0)

在我的应用程序中,我创建了两次 BasicDataSource 并且它在 java 1.8 32 位上失败了。当我转移到 java 1.8 64 位时,问题得到解决