Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OracleDB连接第一次花费的时间太长_Java_Oracle11g_Redhat - Fatal编程技术网

Java OracleDB连接第一次花费的时间太长

Java OracleDB连接第一次花费的时间太长,java,oracle11g,redhat,Java,Oracle11g,Redhat,我在连接到Oracle数据库时遇到问题,需要很长时间(约5分钟),它会发送下面显示的异常。大多数情况下,在第一个错误之后,同一进程的下一个连接正常工作 它是一台RHEL 6机器,具有两个不同的网络接口和ip地址 注: 我使用的url不是“jdbc:oracle:thin:@xxxx:yyy”,而是“jdbc:oracle:thin:@xxxx:yyyy:zzz”。 SID没有丢失,很抱歉:( 这大致就是我所隔离的: bin/java-classpath ojdbc6_g.jar-Djavax.n

我在连接到Oracle数据库时遇到问题,需要很长时间(约5分钟),它会发送下面显示的异常。大多数情况下,在第一个错误之后,同一进程的下一个连接正常工作

它是一台RHEL 6机器,具有两个不同的网络接口和ip地址

注: 我使用的url不是“jdbc:oracle:thin:@xxxx:yyy”,而是“jdbc:oracle:thin:@xxxx:yyyy:zzz”。 SID没有丢失,很抱歉:(

这大致就是我所隔离的:

bin/java-classpath ojdbc6_g.jar-Djavax.net.debug=all -Djava.util.logging.config.file=logging.properties

堆栈跟踪错误:

java.sql.SQLRecoverableException: IO Error: Connection reset
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:533)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:557)
        at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:233)
        at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:29)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:556)
        at java.sql.DriverManager.getConnection(DriverManager.java:579)
        at java.sql.DriverManager.getConnection(DriverManager.java:221)
        at test.jdbc.Main(Test.java:120)
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:248)
        at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:227)
        at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:309)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:257)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:182)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:99)
        at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:121)
        at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:77)
        at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1173)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:309)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:200)
        at oracle.jdbc.driver.T4CTTIoauthenticate.doOSESSKEY(T4CTTIoauthenticate.java:404)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:430)
        ... 35 more
java.sql.SQLRecoverableException:IO错误:连接重置
位于oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:533)
位于oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:557)
位于oracle.jdbc.driver.T4CConnection(T4CConnection.java:233)
位于oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:29)
位于oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:556)
位于java.sql.DriverManager.getConnection(DriverManager.java:579)
位于java.sql.DriverManager.getConnection(DriverManager.java:221)
位于test.jdbc.Main(test.java:120)
原因:java.net.SocketException:连接重置
位于java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
位于java.net.SocketOutputStream.write(SocketOutputStream.java:153)
位于oracle.net.ns.DataPacket.send(DataPacket.java:248)
位于oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:227)
位于oracle.net.ns.NetInputStream.getNextPackage(NetInputStream.java:309)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:257)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:182)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:99)
位于oracle.jdbc.driver.T4CSocketInputStreamWrapper.readnextPackage(T4CSocketInputStreamWrapper.java:121)
位于oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:77)
位于oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1173)
位于oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:309)
位于oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:200)
位于oracle.jdbc.driver.T4CTTIoauthenticate.doosskey(T4CTTIoauthenticate.java:404)
位于oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:430)
…还有35个
这里有一个非常详细的日志记录发生了什么:
此处显示GET Stick的行表示5分钟的等待时间。查看连接字符串时,似乎缺少Oracle服务名称或SID。连接字符串应类似于“jdbc:Oracle:thin:@xxxx:yyyy/zzz”,其中
zzz
是SID。您可能还想看看的答案。

您可能遇到了Oracle JDBC驱动程序的问题,该驱动程序在Linux上默认使用阻塞随机数生成器。请尝试使用以下参数运行Java:

-Djava.security.egd=file:/dev/./urandom
或者,您可以启动一个守护进程来为随机数生成器提供数据

资料来源:


请仔细阅读问题:大多数情况下,在第一个错误之后,同一进程的下一个连接正常工作。@Andremoniy您所引用的问题部分可能是TNS侦听器行为的结果。因此,从TNS侦听器的角度来看,它可能是这样的:一些客户端建立了连接,但没有说明具体内容它想要使用的ular服务。侦听器等待了一段时间,最后重置了连接。无论如何,示例代码中连接字符串的格式不正确-这就是我解决它的原因。抱歉!!!我的错,当我隐藏参数时,我忘记了SID,但实际的形式是:“jdbc:oracle:thin:@xxxx:yyyy:zzz”我猜这与两个网络接口有关。它是否可能路由到错误的接口,超时,然后使用正确的接口?我也这么认为,有没有办法检查这个问题?我希望我能给这个更多的投票。这修复了我在监测系统上与oracle连接缓慢的问题…运行在Ubuntu 14.04.3 LTS上。
-Djava.security.egd=file:/dev/./urandom