代码之家  ›  专栏  ›  技术社区  ›  Steve Wall

设置Oracle 11g会话超时

  •  9
  • Steve Wall  · 技术社区  · 15 年前


    谢谢!
    史蒂夫

    配置groovy省略了dev和test。

    dataSource {
      pooled = true
    }
    
    hibernate {
       cache.use_second_level_cache = true
       cache.use_query_cache = true
       cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'
    }
    
    // environment specific settings
    environments {
    production {
      dataSource {
        driverClassName = "oracle.jdbc.driver.OracleDriver"
        username = "XXXXX"
        password = "XXXXXX"
        dialect = "org.hibernate.dialect.Oracle10gDialect"
        dbCreate = "update" // one of 'create', 'create-drop','update'
        url = "jdbc:oracle:thin:@XXXXXX:1521:xxxx"
      }
    }  }
    
    6 回复  |  直到 7 年前
        1
  •  15
  •   Adam Musch    15 年前

    SQL> SELECT PROFILE, LIMIT FROM DBA_PROFILES WHERE RESOURCE_NAME = 'IDLE_TIME';
    
    PROFILE                        LIMIT
    ------------------------------ ----------------------------------------
    DEFAULT                        UNLIMITED
    
    SQL> SELECT PROFILE FROM DBA_USERS WHERE USERNAME = USER;
    
    PROFILE
    ------------------------------
    DEFAULT
    

    所以我连接的用户有无限的空闲时间-没有超时。

        2
  •  3
  •   Gary Myers    15 年前

    亚当已经建议了数据库配置文件。

    你可以查一下SQLNET.ORA文件文件。有一个 EXPIRE_TIME 参数,但这是用于检测丢失的连接,而不是终止现有的连接。

    如果是一夜之间发生的,听起来更像是空闲超时,可能是应用服务器和数据库服务器之间的防火墙造成的。设置过期时间 阻止这种情况发生(因为每隔10分钟会有一次检查来检查客户机是否处于活动状态)。

    或者数据库正在关闭并重新启动,这可能会终止连接。

    或者,您应该能够使用 validationQuery 因此,它将自动重新启动连接,而无需tomcat重新启动

        3
  •  3
  •   Brian    15 年前

    在您重新启动服务器后开始出现这种情况的原因是,连接池可能是在没有重新启动的情况下添加的,并且您刚刚体验到连接池的第一次使用。处理数据库连接的资源文件的修改日期是什么?

     <Resource name="jdbc/EmployeeDB" auth="Container" 
                validationQuery="Select 1 from dual" type="javax.sql.DataSource" username="dbusername" password="dbpassword"
                driverClassName="org.hsql.jdbcDriver" url="jdbc:HypersonicSQL:database"
                maxActive="8" maxIdle="4"/>
    

    编辑: Grails 1.2

    dataSource {
        pooled = true
        dbCreate = "update"
        url = "jdbc:mysql://localhost/yourDB"
        driverClassName = "com.mysql.jdbc.Driver"
        username = "yourUser"
        password = "yourPassword"
        properties {
            maxActive = 50
            maxIdle = 25
            minIdle = 5
            initialSize = 5
            minEvictableIdleTimeMillis = 60000
            timeBetweenEvictionRunsMillis = 60000
            maxWait = 10000     
        }   
    }
    
        4
  •  2
  •   Vadzim    10 年前

    我来问这个问题是为了寻找一种方法,使oracle会话池基于总会话生存期而不是空闲时间过期。

    似乎可以设置游泳池 validation query

    select 1 from V$SESSION 
    where AUDSID = userenv('SESSIONID') and sysdate-LOGON_TIME < 30/24/60
    

        5
  •  0
  •   Alex Poole    15 年前

    数据库是否知道连接已断开,或者会话仍在v$session中列出?我想,这表明它正在被网络删除。您知道在遇到问题之前它可以保持空闲多长时间吗,以及它是否与TCP idle值有任何相似之处(网络ipv4.tcp\u keepalive \u time、tcp\u keepalive \u probe和tcp\u keepalive \u interval from sysctl(如果我调用正确的话)?无法记住sysctl更改是否在默认情况下保持,但这可能是已修改的内容,然后在重新启动时重置。

    另外,您还可以在不影响整个服务器的情况下重置JDBC连接;当然可以在WebLogic中重置JDBC连接,我意识到这并没有多大帮助,但我不熟悉Tomcat的等价物。

        6
  •  0
  •   Lars    15 年前

    检查应用程序连接池设置,而不是更改oracle db上的任何会话超时设置。他们超时是正常的。

    请看这里: http://grails.org/doc/1.0.x/guide/3.%20Configuration.html#3.3%20The%20DataSource

    问候语, 拉尔斯


    编辑:
    第一眼看到你的配置似乎还可以。
    "Infinite loop of exceptions if the application is started when the database is down for maintenance"

    推荐文章