Oracle创建存储过程及定时任务周期性kill掉inactive状态的session

1、以管理员身份登录DB

sqlplus / as sysdba

2、创建存储过程–排除rman备份的session

CREATE OR REPLACE PROCEDURE DB_KILL_IDLE_CLIENTS AUTHID DEFINER AS
    JOB_NO       NUMBER;
    NUM_OF_KILLS NUMBER := 0;
BEGIN
    FOR REC IN (SELECT SID, SERIAL#, INST_ID, MODULE, STATUS
                                FROM GV$SESSION S
                             WHERE S.USERNAME IS NOT NULL
                                 AND S.LAST_CALL_ET >= 30 * 60
                                 AND S.STATUS = 'INACTIVE'
                                 AND (S.MODULE NOT LIKE 'rman@%'  or S.MODULE  is null)
                             ORDER BY INST_ID DESC) LOOP
        EXECUTE IMMEDIATE 'alter system disconnect session ''' || REC.SID || ', ' ||
                                            REC.SERIAL# || '''immediate';
        DBMS_OUTPUT.PUT_LINE('. killed locally ' || JOB_NO);
        NUM_OF_KILLS := NUM_OF_KILLS + 1;
    END LOOP;
END DB_KILL_IDLE_CLIENTS;
/

3、创建定时任务

declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,  /*自动生成JOB_ID*/  
        WHAT => 'DB_KILL_IDLE_CLIENTS;',  /*需要执行的存储过程名称(大写)或SQL语句*/  
        NEXT_DATE => sysdate+10/(24*60),  /*初次执行时间-下一个10分钟*/  
        INTERVAL => 'trunc(sysdate,''mi'')+10/(24*60)' /*每隔10分钟执行一次*/
      );  
  commit;
end;
/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值