2

我们有这个查询:

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;

有什么建议么?

4

1 回答 1

8

问题类似于如何终止连接到我的 oracle 数据库的所有会话?,尽管并非适用于所有会话。

您需要使用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'
于 2012-04-10T12:27:40.103 回答