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


    今天又遇到了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;
  • 相关阅读:
    BZOJ 2655: calc(拉格朗日插值)
    BZOJ 1485: [HNOI2009]有趣的数列(卡特兰数)
    [学习笔记] 关于组合数的一些总结
    CF 1076E Vasya and a Tree(线段树+树剖)
    CF 1082E Increasing Frequency(贪心)
    51nod 1149 Pi的递推式(组合数学)
    LOJ 2743(洛谷 4365) 「九省联考 2018」秘密袭击——整体DP+插值思想
    关于 unsigned int 比较大小
    洛谷 3295 [SCOI2016]萌萌哒——并查集优化连边
    洛谷 P4512 [模板] 多项式除法
  • 原文地址:https://www.cnblogs.com/lcword/p/5859263.html
Copyright © 2020-2023  润新知