【问题标题】:kill oracle session using loop within PL/SQL or SQL在 PL/SQL 或 SQL 中使用循环终止 oracle 会话
【发布时间】:2012-04-22 16:20:06
【问题描述】:

我们有这个查询:

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;

有什么建议吗?

【问题讨论】:

  • stackoverflow.com/questions/55342/… 的可能副本,但不完全是。最佳答案应该为您提供完成所需的所有信息。从您的代码中,您也只需要查询v$session...
  • 看起来很完美 :-) 谢谢分配
  • 我将如何处理这个问题?如何让它回答?
  • 让@Ben 发表他的评论作为答案...

标签: sql oracle plsql oracle10g oracle11g


【解决方案1】:

该问题类似于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'

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多