zoukankan      html  css  js  c++  java
  • 最近遇到应用日志里报错:ORA-02396: 超出最大空闲时间, 请重新连接(ORA-02396: exceeded maximum idle time),记录一下处理方法。

    出现这个问题的原因是数据库对空闲的连接时间做了限制。

      1.SELECT name, value FROM gv$parameter WHERE name = 'resource_limit';   使用该sql查询是否启用了限制,如果结果是true,说明已启用。

      2.select username,PROFILE from dba_users where username='?';     如果1中的结果是true,查询相关的profile:问号的位置填写连接数据库的账户(username),注意大小写。查询出该账户关联的profile,通常结果为“DEFAULT”.

      3.select RESOURCE_NAME,LIMIT from dba_profiles where profile='DEFAULT' and resource_name='IDLE_TIME';   如果2中执行的结果不是DEFAULT,那么修改sql中的DEFAULT为实际的profile值。

      4.根据3中的结果可以看到时间限制的值,这个值需要比应用使用的数据库连接池的空闲时间要长。如果不想做限制,可以直接使用sql取消限制:alter profile default limit idle_time unlimited; 

      问题解决。

     

    参考文档:

      1.ORA-02396: exceeded maximum idle time — oracle-tech

      2.ORA-02396: exceeded maximum idle time, please connect again的原因_数据库技术_Linux公社-Linux系统门户网站 (linuxidc.com)

    一般为了防止过多活动的session占用资源,可以对允许连接到数据库的session个数,已连接到数据库的session空闲时间等进行限制(当然也可以对尝试连接次数等其它很多内容进行限制)。方式就是可以通过创建一个profile配置,然后将这个profile配置赋给每个用户。

    要使用这种限制的前提是将resource_limit这个参数设置为TRUE。

    alter system set RESOURCE_LIMIT=true;

    创建用户时如果未指定具体profile,会有一个默认的profile,名称是DEFAULT,如下所示:

    SELECT * FROM dba_profiles WHERE PROFILE='DEFAULT';

    ORA-02396: exceeded maximum idle time, please conn

    这是这个名称为DEFAULT的所有配置项参数。

    其中IDLE_TIME就是一个session连上Oracle后不做任何事情,挂在那里的空闲时间。DEFAULT默认所有的参数都是UNLIMITED,也就是无限制。

    但也可以对其进行修改。例如创建一个名称为idletime_profile的profile,并指定其中idle_time参数值是1,单位是分钟。

    SQL> create profile idletime_profile limit idle_time 1;

    Profile created.

    并将该profile赋给用户bisal

    SQL> alter user bisal profile idletime_profile;

    User altered.

    这样当用bisal登录到Oracle后,持续1分钟不干事,再次执行某个操作时就会报ORA-02396: exceeded maximum idle time, please connect again.

    select  * from v$version;  -- 查看oracle的版本信息
    
    select profile,resource_name,limit from dba_profiles where profile='DEFAULT'; 
    
    select name,value from gv$parameter where name='resource_limit';
    
    select resource_name,limit from dba_profiles where  profile='DEFAULT' and resource_name='IDLE_TIME';
    
    alter profile default limit idle_time unlimited;
    
    alter profile default limit idle_time 2;
  • 相关阅读:
    [转]实现财务自由的6大步骤
    [转] js 实现table每列可左右拖动改变列宽度
    [转]在Excel中使用SQL语句实现精确查询
    [书目20150727]有效沟通-余世维
    [书目20150727]选择重于一切(扎克伯格给年轻人的37个人生忠告)
    [转]把汉字写“绝”了
    [转]《间架结构92法》
    深圳社保转入
    广州社保转出
    [转]利用telnet进行SMTP的验证
  • 原文地址:https://www.cnblogs.com/zouhong/p/15181425.html
Copyright © 2011-2022 走看看