gin immediate oop blog bms 今天 ext 对数 bug
今天又遇到了 11gR2 连接数满的问题,以前也遇到过,因为应用那边没有深入检查,没有找到具体原因,暂且认为是这个版本 Oracle 的 BUG 吧.
上次的处理办法是用 Shell 脚本定时在系统中 kill v$session.status='INACTIVE'的连接,但是这次现场没有在操作系统中部署脚本的权限,只好在数据库中做处理,幸好我们对这个数据库有完全的权限.这次使用了 profile+JOB 定时 alter system kill 'sid,seral#' immediate 的方式.具体脚本如下:
-- 添加 JOB,定时清理过期会话
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;
-- 如果 30 分钟过期时间太短,对数据库访问性能产生了影响,可以调整
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;
ALTER PROFILE KILLIDLE LIMIT IDLE_TIME 30;
解决 Oracle 11gR2 空闲连接过多,导致连接数满的问题
来源: http://www.bubuko.com/infodetail-2454007.html