一、前言
在数据库同步脚本中,需要先删除用户再导入用户,此时,如果用户存在session未断开,则会导致删除失败。所以专门写了这个函数,在删除用户之前使用,以kill掉该用户的所有session。
二、代码
代码如下,传入参数为oracle用户名
create or replace procedure kill_session(v_username varchar)
as
v_sid v$session.sid%type;
v_serial v$session.serial#%type;
CURSOR killUser is
select sid, serial#
from v$session
where UPPER(username) = UPPER(v_username);
begin
if killUser%isopen = false then
open killUser;
end if;
fetch killUser
into v_sid, v_serial;
while killUser%found loop
execute immediate 'alter system kill session ''' || v_sid || ',' || v_serial || '''';
fetch killUser
into v_sid, v_serial;
end loop;
close killUser;
end;