2010-02-17 79 views
0

[从ServerFault交叉发布]的Oracle 9i的会话断开连接

我在开发环境中,我们的测试的Oracle 9i的服务器已被现在失常了几天。会发生什么是在几次成功的连接之后,我们的JDBC连接断开连接。

我们得到了我们的IT部门设置的这个盒子,并交给了。这是'我们的问题',所以像'问你DBA'这样的选项不会帮助我。 :(

我们的服务器设置了3个普通数据库(一个是主开发数据库,​​另一个是'实验'开发数据库)我们使用Oracle 10 ojdbc14.jar精简JDBC驱动程序(因为有一些错误在驱动程序的版本9中)我们使用Hibernate与数据库进行通信

我可以看到的唯一变化就是我们现在有更多的用户连接到服务器,而不是一个开发人员,我们现在有3使用Hibernate的连接池,我在想,也许我们会打一些限制?

任何人有任何想法,这是怎么回事?

以下是客户端上的堆栈跟踪:

Caused by: org.hibernate.exception.GenericJDBCException: could not execute query 
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126) [hibernate3.jar:na] 
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114) [hibernate3.jar:na] 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.doList(Loader.java:2235) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.list(Loader.java:2124) [hibernate3.jar:na] 
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401) [hibernate3.jar:na] 
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363) [hibernate3.jar:na] 
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) [hibernate3.jar:na] 
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1149) [hibernate3.jar:na] 
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) [hibernate3.jar:na] 
... 
Caused by: java.sql.SQLException: Io exception: Connection reset 
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:829) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1049) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:854) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1154) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3370) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3415) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.getResultSet(Loader.java:1812) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.doQuery(Loader.java:697) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.doList(Loader.java:2232) [hibernate3.jar:na] 

回答

0

您对Java使用哪种JDK? ojdbc14适用于JDK 1.4及更早版本。这个版本的数据库可能存在一个错误,但是如果您使用的是JDK 5或6,我建议您为JDK找到一个JDBC驱动程序版本。 JAR名称将以某种方式指示JDK 5或6。

来自Oracle论坛的Google搜索出现了this thread。看一下Oracle日志,看看是否有类似于该线程中引用的消息。

+0

我同意。如果堆栈跟踪中没有ORA-或TNS-oracle消息,只是连接重置,则服务器进程可能无法在USER_DUMP_DEST中的数据库服务器上留下跟踪文件。您必须让您的DBA在出现错误时找到跟踪文件(假设它仍在此处),以帮助诊断问题。 – 2010-02-18 08:00:17

+0

我已经使用了最新最亮的驱动程序ojdbc6.jar,问题没有改变......只是堆栈跟踪有几个不同的异常类型。 – malaverdiere 2010-02-18 09:02:56

+0

你能用简单的代码重现这种行为吗? – duffymo 2010-02-18 10:49:00

0

我和Oracle及其他数据库有类似的问题。它发生在db服务器关闭连接时(例如超时)。您可以轻松处理连接池的情况(例如c3p0)。另见herehere

以防万一,我c3p0.properties文件看起来像:

c3p0.preferredTestQuery=SELECT 1 from dual 
c3p0.maxConnectionAge=3600 
c3p0.testConnectionOnCheckout=true 
c3p0.acquireRetryDelay=1000 
c3p0.acquireRetryAttempts=30 
c3p0.breakAfterAcquireFailure=false