存储过程如下:
CREATE OR REPLACE PROCEDURE P_KILL_SESSION(V_USER IN VARCHAR2,
V_SID IN NUMBER,
V_SERIAL IN NUMBER) AS
V_SQL VARCHAR2(4000);
BEGIN
SELECT 'ALTER SYSTEM KILL SESSION ''' || SID || ',' || SERIAL# ||',@'||INST_ID||''' immediate'
INTO V_SQL
FROM gV$SESSION
WHERE USERNAME = V_USER
AND SID = V_SID
AND SERIAL# = V_SERIAL;
EXECUTE IMMEDIATE V_SQL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20001,
'Sid: (' || V_SID || ',' || V_SERIAL ||
') does not exists, or The user of this session is not (' ||
V_USER || ')');
END;
/
CREATE OR REPLACE PROCEDURE P_KILL_USER_SESSION(P_SID IN NUMBER,
P_SERIAL NUMBER) AUTHID CURRENT_USER AS
V_USERNAME VARCHAR2(30);
V_SID NUMBER;
BEGIN
SELECT SYS_CONTEXT('USERENV', 'SESSION_USER'),
SYS_CONTEXT('USERENV', 'SID')
INTO V_USERNAME, V_SID
FROM DUAL;
IF P_SID != V_SID THEN
P_KILL_SESSION(V_USERNAME, P_SID, P_SERIAL);
ELSE
RAISE_APPLICATION_ERROR(-20000,
'Can not kill current session (' || P_SID || ',' ||
P_SERIAL || ')!');
END IF;
END;
/
只需要授权给指定用户就可以kill 掉自身发起的会话。
GRANT EXECUTE ON SYS.P_KILL_USER_SESSION TO username;
create synonym username.P_KILL_USER_SESSION for SYS.P_KILL_USER_SESSION;
普通用户使用方法
grant select on v_$session to username;
exec P_KILL_USER_SESSION(sid,serial#);
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




