解决Oracle 11gR2 空闲连接过多,导致连接数满的问题
2016-09-10 13:41
447 查看
今天又遇到了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;
上次的处理办法是用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 空闲连接过多,导致连接数满的问题
- 解决问题的记录【一】TCP连接过多导致新连接创建失败
- 解决oracle的hang\连接数满\客户端无法连接问题
- oracle 11gR2数据库,1521端口未开启和sid问题,导致报错,错误代码:ora:12505,解决办法,
- ASP.NET和Oracle连接问题的解决方法——Unable to load DLL (oci.dll)
- 开始使用CodeSmith3.1-解决了Oracle连接及汉字的问题
- 从Oracle网络结构解决连接问题
- 关于ORACLE的ora-12505报错以及连接问题的解决及相关资料
- 解决mysql 8小时空闲后连接超时的问题
- asp.net 连接oracle时 出现客户端连接问题的解决办法
- oracle可执行文件s位导致的Cluster资源组无法正常启动的问题解决
- 解决使用ASP无法连接 ORACLE 9i 数据库的问题。
- 开始使用CodeSmith3.1-解决了Oracle连接及汉字的问题
- 在Oracle网络结构中解决连接问题
- 主题:理解oracle的网络结构,解决连接问题
- 详细解决用myEclips的db Browser连接到Oracle后,用反向工程Hibernate Reverse Engineering 生成.hbm.xml,POJD类还有DAO时出错的问题
- 从Oracle网络结构解决连接问题
- 理解oracle的网络结构 解决你的连接问题
- 解决XP IIS 禁止访问连接的用户过多的问题