【问题标题】:web application creates inactive session in Oracle by jdbcWeb 应用程序通过 jdbc 在 Oracle 中创建非活动会话
【发布时间】:2015-12-15 15:34:35
【问题描述】:

我们有一个用 Java 编写的 Web 应用程序,并且正在连接到 Oracle 数据库以进行数据提取。最近,我们在使用 grails 框架的 Web 应用程序 JDBC 中遇到了 Oracle 数据库中过多的非活动会话。即使我们点击 UI Page 中的刷新按钮,INACTIVE SESSION 的大小也会增加。这将长期存在(以天计)。

我们非常确定所有连接在每个进程之后都被关闭并设置为 null。

任何人都可以帮助我们吗?为什么会导致数据库中的会话处于非活动状态,对此有什么解决方案。

【问题讨论】:

    标签: java oracle jdbc


    【解决方案1】:

    我们非常确定所有连接在每个进程之后都被关闭并设置为 null。

    如果您手动关闭连接(如果您使用 JDBC,似乎就是这种情况),您为什么不使用日志记录来分析导致创建新连接的原因?

    也许你也使用连接池?也许您以共享模式连接到 ORACLE?

    在您提供更多信息之前,可能有太多可能

    更新:

    在 cmets 中,您说您明确关闭了连接池为什么
    强烈建议使用连接池,这样您的应用程序就不会在每次需要与数据库交互时生成新连接,而是使用池中的连接。 因此,首先要确保您实际使用了连接池。很可能您使用的是应用程序服务器(如果是,请指定使用哪一个),而且我也怀疑您使用的是纯 JDBC。最有可能的是,它是 Hibernate 或任何其他持久性提供程序,对吗?

    另请参阅: Inactive session in Oracle by JDBC

    【讨论】:

    • 是的,我们正在使用连接池,(javax.sql.PooledConnection) 来获取连接,我们的 Oracle 处于专用模式。
    • 即使在 UI 页面刷新时,INACTIVE SESSION 的大小也会增加。
    • 我已经在 finally 块中关闭了 javax.sql.pooledconnection 并分配了 null ,但我仍然可以看到 DB 中的 INACTIVE SESSIONS .code 就像 ...finally{_pconn.close (); _pconn = null; OBTContext.info("_pconn.close()"+_pconn); }
    • 没有作业正在运行 - 只是浏览控制台,我看到单个控制台在数据库中产生 49 个非活动会话和 75 个进程,应用服务器内存达到 54%。 ,这真的很痛苦。
    • jFrencetc:在cmets中,您说您明确关闭了连接池。为什么? Anil:我想看看是否有任何引用会留下,那也关闭了,所以我明确地关闭了,为了检查。
    猜你喜欢
    • 2014-11-13
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多