--Oracle中开发环境有时会有锁产生,开发人员需要kill session权限
--但Oracle中对应系统权限是alter system, 权限太大,不合适。
--故可以通过创建存储过程给开发人员调用使用
--使用有dba权限用户创建,或者使用sys用户创建,通过加入条件判断,限制用户只能处理自己的进程
CREATE OR REPLACE PROCEDURE p_kill_session ( v_sid number, v_serial number) AS
v_sql VARCHAR2(500);
v_user varchar2(20);
v_logon varchar2(50);
BEGIN
SELECT username
INTO v_user
FROM v$session
WHERE SID = v_sid;
v_logon := sys_context('userenv', 'SESSION_USER');
if v_user = v_logon then
v_sql := 'ALTER SYSTEM KILL SESSION '''|| v_sid || ',' || v_serial || '''';
EXECUTE IMMEDIATE v_sql;
--dbms_output.put_line(v_sql);
else
raise_application_error(-20000, 'This is not your session!');
end if;
END;
/
--如果不是sys用户创建的,需要用sys用户给DBA用户授权
grant select on v_$session to <dbauser>;
grant alter system to <dbauser>;
--授予普通用户执行权限
grant execute on p_kill_session to <username>;