[英]kill oracle session using loop within PL/SQL or SQL
we have this query:我们有这个查询:
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
I need to kill all sessions which have the same SQL ID我需要杀死所有具有相同 SQL ID 的会话
I'm not sure how to connect things together, but I have this so far:我不确定如何将事物连接在一起,但到目前为止我有这个:
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;
Any suggestions?有什么建议么?
The question is similar to How can I kill all sessions connecting to my oracle database?问题类似于How can I kill all sessions connecting to my oracle database? , though for not for all sessions. ,虽然不是所有会议。
You need to use execute immediate
in order to alter the system in a PL/SQL block:您需要使用execute immediate
来更改 PL/SQL 块中的系统:
execute immediate 'Alter System Kill Session '''|| rec.Sid
|| ',' || rec.Serial# || ''' IMMEDIATE';
I query your need to use all the additional system tables.我查询您是否需要使用所有额外的系统表。 Something like the following query may suffice if all you want to kill is a specific SQL_ID
:如果您想要杀死的只是一个特定的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.