解决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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2017-01-08 人工智能——数据、信息与知识