zoukankan      html  css  js  c++  java
  • Oracle session inactive状态临时表数据未清空问题

    问题描述:Oracle数据库,java代码使用某数据库实例,获取connection并在使用结束关闭,而session未销毁,而是状态变为inactive从而导致临时表数据未清空。

    Oracle临时表有session级别和事务级别,正常情况下session级别临时表数据会在session关闭后自动清空。而项目中同时连接了多个实例,2个实例配置参数全部一致,另一个实例在关闭connection后,session自动销毁,该实例session却仅仅是状态在切换。

    原因:java web程序使用的了Oracle提供的连接池oracle.jdbc.pool.OracleDataSource.OracleDataSource()连接方式所致。

    通过JDBC获得Oracle数据库连接,有三种方式:OCI方式、thin方式和JdbcOdbc桥方式。OCI方式依赖于本地的动态链接库,如果在本地安装了Oracle数据库客户端可以采用该方式;而thin方式为纯java的数据库连接方式;JdbcOdbc桥方式依赖于本地ODBC数据库源的配置。

    Oracle实现的JDBC3.0标准时,OracleDataSource默认是开启隐式连接的,这种方式下,在close connection时session并不会关闭,只是状态改变,所以会话级别的临时表数据会越来越多,一般要进行truncate。也可以通过ds.setConnectionCacheProperties(false)关闭隐式连接。所谓隐式连接其实就是把connection进行了缓存。

    而oci方式下close connection时,session会释放,这时临时表数据会自动清空。

    岁月留痕
  • 相关阅读:
    数据库优化设计方案(转)
    (转)Creating a DotNetNuke® Module Using CodeSmith Tools(For DotNetNuke Version 4.4.0 or higher)
    诱人的社区DotNetNuke免费模块列表
    C#版 DotNetNuke(DNN) 4.4.0
    在Asp.net注册js
    .net关于企业Excel报表的生成
    用DNN制作的站点
    Rainbow Resource
    ASP.NET Futures
    (轉)Net中获取CPU编号
  • 原文地址:https://www.cnblogs.com/navigate/p/5314225.html
Copyright © 2011-2022 走看看