几十个客户端 ,却有几百个session连接而且这些连接好像只增不减,很快就达到数据库设置的最大session数然后新的连接就无法连接数据库了  如何在数据库【oracle】设置session在一段时间内没反应就自动释放啊???急啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    http://topic.csdn.net/t/20050310/16/3840701.html
      

  2.   

    可以使用profile 来设定空闲时间长短。一旦空闲时间的长度到你所设定的值 就会自动断开连接
      

  3.   

    通过给用户设置Profile来限制用户的IDLE_TIMESQL>Create     profile     文件名     limit   
              FAILED_LOGIN_ATTEMPTS:指定锁定用户的登录失败次数   
              PASSWORD_LOCK_TIME:指定用户被锁定天数   
              PASSWORD_LIFE_TIME:指定口令可用天数   
              PASSWORD_REUSE_TIME:指定在多长时间内口令不能重用   
              PASSWORD_REUSE_MAX:指定在重用口令前口令需要改变的次数     
              SESSIONS_PER_USER:限制用户并发会话个数   
              CPU_PER_SESSION:限制会话所占用的CPU时间(百分之一秒)   
              CPU_PER_CALL:限制每次调用所占用的CPU时间(百分之一秒)   
              CONNECT_TIME:限制会话的总计连接时间(分钟)     
              IDLE_TIME:限制会话的空闲时间(分钟));   SQL>Create     user     用户名   
              IDENTIFIED     BY     口令   
              Default     tablespace     表空间名   
              TEMPORARY     tablespace     临时表空间名   
              Profile     profile文件名   
              Quota     限制空间大小     on     表空间名;对已有用户则
    SQL>ALTER USER 用户名  Profile profile文件名 ;
      

  4.   

    你的数据库是出于什么模式运行,是专用模式还是共享模式呢,如果是共享模式的话可能是你的会话数达到上限,执行命令查看show parameter process;再查看select county(*) from v$process;
    比较一下这两个数值是否超过进程上限,如果要查看你的数据库是否出于共享模式还是专用模式可以执行如下语句select distinct server from v$session;如果值全是ditected 则为专用模式,如果有shared则为共享模式,共享模式经常会导致楼主这样的问题,导致会话数达到上限,资源部够用的情况
      

  5.   

    学习:
    Oracle Session

    Oracle Profile 使用详解
      

  6.   

    3楼说的也是一个办法, 不过对现有的用户进行修改是可以的,但是如果新建用户,忘记加入此profile就会再次导致此问题,我建议楼主尽快找到根本原因
      

  7.   

    idle_time不是灵药,如果自己不断开连接或者超时后执行一次操作,是不会自动关闭session
    connect_time也不现实
    oracle官方说session会自动清除,但也不知什么时候什么条件下自动清除
      

  8.   


    不行的话,就手动kill session吧!
      

  9.   

    几百个啊,还不如把自己  kill  掉……
      

  10.   

    http://busyfan.itpub.net/post/31671/463874
      

  11.   

    首先客户端的程序有问题,如果客户端不能解决,那只能通过存储过程定时kill掉了
    CREATE OR REPLACE PROCEDURE "PROC_KILL_SESSION" AS  v_sid number;  v_serial number;  killer varchar2(1000);  CURSOR cursor_session_info is  select sid,serial# from v$session where type!='BACKGROUND' and status='INACTIVE' and last_call_et>7200 and username='NETFORCE' and machine='imep1'; BEGIN  open cursor_session_info;  loop  fetch cursor_session_info into v_sid,v_serial;  exit when cursor_session_info%notfound;
     killer:='alter system disconnect session '''||v_sid||','||v_serial||''' post_transaction immediate'; -- killer:='alter system kill session '''||v_sid||','||v_serial||'''  immediate';  execute immediate killer;  end loop;  dbms_output.PUT_LINE(cursor_session_info%rowcount||' users with idle_time>7200s have been killed!');  close cursor_session_info; END; /
    再通过编写一个job进行
    BEGIN DBMS_JOB.SUBMIT( job => job, what => 'kill_session;', next_date => SYSDATE, interval => 'sysdate + 120/1440'); --120minutescommit; END; /-
      

  12.   

    http://blog.csdn.net/wawayu_0/archive/2010/03/23/5410107.aspx