繁体   English   中英

在 PL/SQL 或 SQL 中使用循环杀死 oracle session

[英]kill oracle session using loop within PL/SQL or SQL

我们有这个查询:

ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;

我需要杀死所有具有相同 SQL ID 的会话

我不确定如何将事物连接在一起,但到目前为止我有这个:

for rec in (SELECT se.sid,ss.serial# 
              FROM v$session ss, v$sesstat se, v$statname sn 
             WHERE se.statistic# = sn.statistic# 
               AND name like '%CPU used by this session%' 
               AND se.sid = ss.sid 
               AND ss.status = 'ACTIVE' 
               AND ss.username is not null 
               AND ss.sql_id ='f7frew3erwe'
             ORDER BY value ASC) loop
  ALTER SYSTEM KILL SESSION 'rec.sid,rec.serial#' IMMEDIATE; //this is the tricky part!
end loop;

有什么建议么?

问题类似于How can I kill all sessions connecting to my oracle database? ,虽然不是所有会议。

您需要使用execute immediate来更改 PL/SQL 块中的系统:

execute immediate 'Alter System Kill Session '''|| rec.Sid  
                       || ',' || rec.Serial# || ''' IMMEDIATE';

我查询您是否需要使用所有额外的系统表。 如果您想要杀死的只是一个特定的SQL_ID ,则类似以下查询的内容可能就足够了:

SELECT se.sid,ss.serial# 
  FROM v$session
 WHERE status = 'ACTIVE' 
   AND username is not null 
   AND sql_id ='f7frew3erwe'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM