注册
脚本分享:批量清理IDLE状态会话连接
技术分享/ 文章详情 /

脚本分享:批量清理IDLE状态会话连接

鱼塘顽主 2022/06/30 2243 0 0

使用场景:数据库存在大量IDLE连接长时间没有释放,临时解决方案。

DECLARE
sess_count int;
CURSOR c_sessions
is
/* 游标获取超过10s以上的IDLE状态会话 */
SELECT * FROM
  (
  SELECT DATEDIFF(SS, LAST_RECV_TIME, SYSDATE) SS,
         DBMS_LOB.SUBSTR(SF_GET_SESSION_SQL(SESS_ID)),
		 *
    FROM V$SESSIONS
   WHERE STATE = 'IDLE' order by ss desc
   )WHERE SS >10;
c_row c_sessions%rowtype;
begin
select count(*) into sess_count from
  (
  SELECT DATEDIFF(SS, LAST_RECV_TIME, SYSDATE) SS,
         DBMS_LOB.SUBSTR(SF_GET_SESSION_SQL(SESS_ID)),
		 *
    FROM V$SESSIONS
   WHERE STATE = 'IDLE' order by ss desc
   )where SS >10;
/* 判断超过10秒IDLE状态会话总数超过5个,执行清理 */
if sess_count >= 5 then
  for c_row in c_sessions
    loop
      execute immediate 'sp_close_session('''||c_row.sess_id||''')';
    end loop;
end if;
end;
/
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服