首页 > 代码库 > 解决Oracle 11gR2 空闲连接过多,导致连接数满的问题
解决Oracle 11gR2 空闲连接过多,导致连接数满的问题
今天又遇到了11gR2连接数满的问题,以前也遇到过,因为应用那边没有深入检查,没有找到具体原因,暂且认为是这个版本Oracle的BUG吧。
上次的处理办法是用Shell脚本定时在系统中kill v$session.status=‘INACTIVE‘的连接,但是这次现场没有在操作系统中部署脚本的权限,只好在数据库中做处理,幸好我们对这个 数据库有完全的权限。这次使用了profile+JOB定时alter system kill ‘sid,seral#‘ immediate的方式。具体脚本如下:
- CREATE PROFILE KILLIDLE LIMIT IDLE_TIME 30;
-
- SELECT * FROM dba_profiles WHERE PROFILE=‘KILLIDLE‘;
-
- ALTER USER TEST_USER PROFILE KILLIDLE;
-
- SELECT username,PROFILE FROM dba_users WHERE username=‘TEST_USER‘;
-
- ALTER SYSTEM SET resource_limit=TRUE;
-
-
-
-
-
-
- CREATE OR REPLACE PROCEDURE sp_kill_idlesession
-
- /**********************************
-
- 清除idle超时的会话进程
-
- **********************************/
-
- AS
-
- CURSOR c_kill_sqls
-
- IS SELECT ‘alter system kill session ‘‘‘||s.sid||‘,‘||s.SERIAL#||‘‘‘ immediate‘ sqlstr FROM v$session s WHERE s.STATUS=‘SNIPED‘;
-
- BEGIN
-
- FOR v_sql IN c_kill_sqls
-
- LOOP
-
- EXECUTE IMMEDIATE v_sql.sqlstr;
-
- END LOOP;
-
- END;
-
-
-
-
-
- --添加JOB,定时清理过期会话
-
- DECLARE jobnum NUMBER :=661;
-
- BEGIN
-
- dbms_job.submit(job => jobnum,
-
- what => ‘sp_kill_idlesession;‘,
-
- next_date => to_date(‘30-04-2014 18:00:00‘, ‘dd-mm-yyyy hh24:mi:ss‘),
-
- interval => ‘SYSDATE + 1/144‘);
-
- commit;
-
- END;
-
-
-
-
-
-
-
- --如果30分钟过期时间太短,对数据库访问性能产生了影响,可以调整
-
- ALTER PROFILE KILLIDLE LIMIT IDLE_TIME 30;
解决Oracle 11gR2 空闲连接过多,导致连接数满的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。