ITPub博客

首页 > 数据库 > Oracle > 解决Oracle 11gR2 空闲连接过多,导致连接数满的问题

解决Oracle 11gR2 空闲连接过多,导致连接数满的问题

原创 Oracle 作者:旧梦依稀 时间:2014-05-05 10:26:51 0 删除 编辑
今天又遇到了11gR2连接数满的问题,以前也遇到过,因为应用那边没有深入检查,没有找到具体原因,暂且认为是这个版本Oracle的BUG吧。
上次的处理办法是用Shell脚本定时在系统中kill  v$session.status='INACTIVE'的连接,但是这次现场没有在操作系统中部署脚本的权限,只好在数据库中做处理,幸好我们对这个数据库有完全的权限。这次使用了profile+JOB定时alter system kill 'sid,seral#' immediate的方式。具体脚本如下:


  1. CREATE PROFILE KILLIDLE LIMIT IDLE_TIME 30;

  2. SELECT * FROM dba_profiles WHERE PROFILE='KILLIDLE';

  3. ALTER USER TEST_USER PROFILE KILLIDLE;

  4. SELECT username,PROFILE FROM dba_users WHERE username='TEST_USER';

  5. ALTER SYSTEM SET resource_limit=TRUE;






  6. CREATE OR REPLACE PROCEDURE sp_kill_idlesession

  7. /**********************************

  8. 清除idle超时的会话进程

  9. **********************************/

  10. AS

  11. CURSOR c_kill_sqls

  12. IS SELECT 'alter system kill session '''||s.sid||','||s.SERIAL#||''' immediate' sqlstr FROM v$session s WHERE s.STATUS='SNIPED';

  13. BEGIN

  14. FOR v_sql IN c_kill_sqls

  15.   LOOP

  16.     EXECUTE IMMEDIATE v_sql.sqlstr;

  17.   END LOOP;

  18. END;





  19. --添加JOB,定时清理过期会话

  20. DECLARE jobnum NUMBER :=661;

  21. BEGIN

  22.   dbms_job.submit(job => jobnum,

  23.                   what => 'sp_kill_idlesession;',

  24.                   next_date => to_date('30-04-2014 18:00:00', 'dd-mm-yyyy hh24:mi:ss'),

  25.                   interval => 'SYSDATE + 1/144');

  26.   commit;

  27. END;







  28. --如果30分钟过期时间太短,对数据库访问性能产生了影响,可以调整

  29. ALTER PROFILE KILLIDLE LIMIT IDLE_TIME 30;



 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28998293/viewspace-1153969/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-06-24

  • 博文量
    46
  • 访问量
    195569