创建Oracle存储过程循环查杀过期连接会话【企业DBA实战任务】

在一些写法不够严谨的程序代码设计上,一些数据库连接,在处理完数据请求后,没有主动释放或关闭,从而导致数据库层面积累了大量的无用连接,这些连接占用大量的数据库资源,在无法对代码做调整的情况下,可以从数据库层面主动结束或关闭这些会话连接,下面是针对这个问题设计的存储过程:

CREATE OR REPLACE PROCEDURE DB_KILL_FRNT_CLIENTS  AS
  job_no       number;
  num_of_kills number := 0;
BEGIN

  FOR REC IN (SELECT SID, SERIAL#, MODULE, STATUS
                FROM v$session S
               WHERE username = 'FRNT'
                 and status = 'SNIPED') LOOP
    ---------------------------------------------------------------------------
    -- kill FRNT SNIPED sessions immediately
    ---------------------------------------------------------------------------
    DBMS_OUTPUT.PUT_LINE('LOCAL SID ' || rec.sid || '(' || rec.module || ')');
    execute immediate 'alter system kill session ''' || rec.sid || ', ' ||
                      rec.serial# || '''immediate';

   DBMS_OUTPUT.PUT_LINE('. killed locally ' || job_no);
    num_of_kills := num_of_kills + 1;
  END LOOP;
  DBMS_OUTPUT.PUT_LINE('Number of killed xxxx system sessions: ' ||
                       num_of_kills);
END DB_KILL_FRNT_CLIENTS;

然后封装成Bash sh脚本调用上述存储过程:

#/bin/sh
source ~/.bash_profile
/oracle/app/db/11.2.0/bin/sqlplus "/as sysdba" << EOF
spool /home/oracle/kill_frnt_session.log
exec DB_KILL_FRNT_CLIENTS
spool off
exit
EOF

直接在LINUX下定时任务调用:

30 * * * * /home/oracle/kill_frnt_session.sh

©版权声明:本文为天凯DBS的原创文章,转载请附上原文出处链接及本声明,否则将追究法律责任。
原文链接:https://dbs-service.cn/a/205.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值