DM清理kill大于10s的select会话语句

使用过程定期清理kill大于10s的select会话语句,以免阻塞其它会话,供参考

/******************************************
功能说明:定期清理kill大于10s的select会话语句,以免阻塞其它会话
CREATE TABLE "KILL_STL_SESS_BAK"
(
"TF" VARCHAR2(39),
"SESS_ID" BIGINT,
"TRX_ID" BIGINT,
"MSGT" INTEGER,
"SQL_TEXT" VARCHAR2(32767),
"CURR_SCH" VARCHAR(128),
"USER_NAME" VARCHAR(128),
"CLNT_HOST" VARCHAR(128),
"CLNT_IP" VARCHAR(128),
"CLNT_TYPE" VARCHAR(128),
"OSNAME" VARCHAR(128),
"LAST_SEND_TIME" VARCHAR2(32767),
"RECORDING_TIME" TIMESTAMP
);

create or replace procedure dm_dba_close_slt_session 
    AUTHID DEFINER
as
begin
    for rs in( select 'sp_close_session('||TF||');' as "op_sql",
            "SESS_ID",
            "TRX_ID" ,
            "MSGT" ,
            "SQL_TEXT" ,
            "CURR_SCH" ,
            "USER_NAME",
            "CLNT_HOST" ,
            "CLNT_IP" ,
            "CLNT_TYPE" ,
            "OSNAME" ,
            "LAST_SEND_TIME",
            getdate() as "RECORDING_TIME"
       from ( select sess_id tf,-- sp_close_session sess_id                                   ,
                    sess_id ,
                    trx_Id ,
                    datediff(ss, last_recv_time, sysdate) MsgT,                             --已执行时间 s
                    '--'||CURR_SCH ||' '|| to_char(sf_get_session_sql(sess_id)) "SQL_TEXT" ,--完整sql
                    curr_sch ,
                    user_name ,
                    clnt_host ,
                    clnt_ip ,
                    clnt_type ,
                    osname ,
                    left(last_send_time, 19) as last_send_time
               from v$sessions
              where state='ACTIVE'
                    -- 过滤update类型的SQL
                and lower (to_char(sf_get_session_sql(sess_id))) like 'select %' )
      where MsgT>=10 )  --MsgT 单位秒,查询大于10s的select会话语句;
    loop
        execute immediate rs."op_sql";
        insert into "KILL_SESS_BAK" values(rs."op_sql", 
               rs."SESS_ID", 
               rs."TRX_ID", 
               rs."MSGT", 
               rs."SQL_TEXT", 
               rs."CURR_SCH", 
               rs."USER_NAME", 
               rs."CLNT_HOST",
               rs."CLNT_IP", 
               rs."CLNT_TYPE", 
               rs."OSNAME", 
               rs."LAST_SEND_TIME", 
               rs."RECORDING_TIME");
         
        commit;
    end loop;
end;
/ --disql执行需要加/

--执行语句kill会话
dm_dba_close_slt_session;


查询备份表结果示例:

select * from KILL_SESS_BAK;

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太行山有西瓜汁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值