【问题标题】:Oracle 9i Session DisconnectionsOracle 9i 会话断开
【发布时间】:2010-02-17 11:01:05
【问题描述】:

[从 ServerFault 交叉发布]

我在开发环境中,我们的测试 Oracle 9i 服务器已经运行了几天。发生的情况是,我们的 JDBC 连接在几次成功连接后断开。

我们的 IT 部门设置了这个盒子并交给了我们。这是“我们的问题”,所以像“问你 DBA”这样的选项对我没有帮助。 :(

我们的服务器设置了 3 个普通数据库(一个是主开发数据库,​​另一个是“实验”开发数据库)。我们使用 Oracle 10 ojdbc14.jar 瘦 JDBC 驱动程序(因为第 9 版驱动程序中存在一些错误)。我们正在使用 Hibernate 与数据库通信。

我能看到的唯一改变是我们现在有更多的用户连接到服务器。我们现在有 3 个开发人员,而不是 1 个开发人员。对于 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]

【问题讨论】:

    标签: java hibernate jdbc oracle9i


    【解决方案1】:

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

    在 Oracle 论坛上出现了一个 Google 搜索 this thread。查看 Oracle 日志,看看是否有与该线程中引用的消息类似的消息。

    【讨论】:

    • 我同意。如果您的堆栈跟踪中没有 ORA- 或 TNS- oracle 消息,只是连接重置,则服务器进程可能失败,在 USER_DUMP_DEST 中的数据库服务器上留下了跟踪文件。您必须让 DBA 找到错误发生时的跟踪文件(假设它仍然存在),以帮助诊断问题。
    • 我用过最新最亮的驱动ojdbc6.jar,问题没有改变……只是堆栈跟踪有几种不同的异常类型。
    【解决方案2】:

    我在使用 Oracle 和其他数据库时遇到了类似的问题。它发生在数据库服务器关闭连接时(例如超时)。您可以使用连接池(例如 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
    

    【讨论】:

      猜你喜欢
      • 2016-05-12
      • 2010-09-05
      • 2018-01-09
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多