zoukankan      html  css  js  c++  java
  • 解决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;
  • 相关阅读:
    SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSAS 系列
    微软BI 之SSRS 系列
    微软BI 之SSRS 系列
    配置 SQL Server Email 发送以及 Job 的 Notification通知功能
  • 原文地址:https://www.cnblogs.com/lcword/p/5859263.html
Copyright © 2011-2022 走看看