美文网首页
oracle主动断开连接

oracle主动断开连接

作者: 念䋛 | 来源:发表于2021-06-30 13:38 被阅读0次

    当项目运行的时候,会有数据库断开连接的情况,java报错信息如下
    org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 17008, SQLState: 08003
    org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 关闭的连接
    oracle主动的关闭了连接,这样做可以防止长连接过多导致性能下降,这也是一把双刃剑,如果项目长时间没有访问,oracle就可能主动的断开连接。而且oracle断开连接,客户端是没有感知的,导致客户端访问oracle发生关闭连接的异常。
    那如何保证oracle不主动的关闭连接呢
    oracle配置方面两个关键的参数

    connect time:连接会话的最长连接时间分钟数,当用户会话时间超过指定的时间,Oracle将回滚当前事务,并且结束sesion
    idle time:连接会话的最长空闲时间分钟数,当用户空闲时间超过指定的时间,Oracle将回滚当前事务,并且结束他的会话
    
    --查看配置文件 有default和其他的profiles
    select t.* from dba_profiles t; 
    --查看用户使用的是哪个配置文件
    select username,profile from dba_users where username='PHIS_UNIEAP';
    --修改配置文件 单位是分钟
    alter profile DEFAULT limit idle_time UNLIMITED;
    

    客户端方面可以配置数据库的保活机制,这里用tomcat数据源举例

          validation-query: SELECT 1 from dual #保活机制发送的sql
          max-wait: 10000 #空闲连接的最大等待事件
          initial-size: 1 #初始化1个连接
          max-idle: 2   #最大两个连接,最大连接数建议是核心数+1,防止多连接导致的线程上下文切换
          time-between-eviction-runs-millis: 5000 #每隔多久向数据库发送心跳,单位是毫秒
          test-while-idle: true  #开启保活机制
    

    相关文章

      网友评论

          本文标题:oracle主动断开连接

          本文链接:https://www.haomeiwen.com/subject/tdlrultx.html