首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >第一次使用太长时间的OracleDB连接

第一次使用太长时间的OracleDB连接
EN

Stack Overflow用户
提问于 2013-01-18 14:06:41
回答 2查看 8.7K关注 0票数 13

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

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

注意:我没有使用url,比如:"jdbc:oracle:thin:@xxxx:yyy,实际上是:"jdbc:oracle:thin:@xxxx:yyyy:zzz。SID没有失踪,很抱歉:

这大概是我所孤立的:

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

代码语言:javascript
复制
Class.forName ("oracle.jdbc.OracleDriver")
DriverManager.getConnection("jdbc:oracle:thin:@xxxx:yyyy", "aaaa", "bbbb")

错误StackTrace:

代码语言:javascript
复制
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

这里有一个非常详细的日志记录了发生的事情:http://pastebin.com/MMFKU26z,这句话的意思是“卡在这里”代表了5分钟的等待时间

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-09 16:39:07

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

代码语言:javascript
复制
-Djava.security.egd=file:/dev/./urandom

或者,您也可以启动一个守护进程来输入随机数生成器。Linux "rngd“守护进程就是一个例子。

资料来源:

票数 27
EN

Stack Overflow用户

发布于 2013-01-18 14:19:49

查看连接字符串,似乎缺少Oracle服务名称或SID。连接字符串应该类似于"jdbc:oracle:thin:@xxxx:yyyy/zzz",其中zzz是SID。您可能还想看看this question的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14400595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档