11

尝试使用瘦 jdbc 驱动程序在 64 位 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)
4

6 回答 6

15

我们有一些非常相似的东西,将程序从 32 位操作系统移动到 64 位操作系统,并且许多并发进程会抛出 IO 错误:连接重置。

偶然发现了这个修复它:

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

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

于 2014-02-04T04:31:40.830 回答
7

你没有包括问题的任何细节,比如发生了什么变化?这是您的新配置还是突然停止工作?你知道你是否有足够的可用连接吗?每个连接都会发生这种情况还是间歇性的?

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

  1. 网络故障
  2. 您已经用尽了最大连接数,所以 Oracle 挂断了您。
  3. 防火墙限制
  4. 数据库服务器或侦听器有问题。为您的会话提供服务的处理在打开后可能会崩溃。

检查以下有关如何检查活动连接数和最大值的 stackoverflow 线程。如果这是问题所在,我预计会出现“ORA-00018:超出最大会话数”错误,所以它可能不是。但值得检查。

如何检查允许连接到 Oracle 数据库的最大数量?

于 2013-03-17T19:45:13.077 回答
7

我在使用 Sqoop Oracle 导入时遇到了类似的问题,并且我已经实施了此链接建议的修复

此设置有助于解决问题:

-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" 将帮助您解决问题。

于 2014-08-29T06:27:08.203 回答
2

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

于 2013-03-17T19:35:06.647 回答
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
于 2014-10-06T11:54:50.930 回答
0

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

于 2021-05-05T21:48:01.633 回答