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

Posted lclc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决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;

以上是关于解决Oracle 11gR2 空闲连接过多,导致连接数满的问题的主要内容,如果未能解决你的问题,请参考以下文章

我的是Oracle 11 G 的,登陆的时候老是 连接到空闲例程,在网上看到的方法都解决不了!

Oracle 11gR2 RAC 数据库不能连接(ORA-12537: TNS:connection closed)的解决

PowerDesigner连接数据库(Oracle)

Oracle DB - 从 19c 客户端连接 11gR2 DB - ORA-12650:没有通用加密或数据完整性算法

CentOS 7安装Oracle 11gR2以及设置自启动

oracle数据库11gr2安装进度8%闪退