1.删除除当前会话外所有会话
场景:在删除oracle当前数据库的时候要kill掉所有链接当前数据库的会话(当然可以重启oracle,但是有可能此oracle上又不止一个数据库,重启数据库会导致其他数据库短暂不可用)
DECLARE
u_sid varchar2(50);
u_serialnumber varchar2(50);
u_name varchar2(50);
u_cursid varchar2(10);
CURSOR c1 IS select trim(s.sid),trim(s.serial#)
from v$session s,v$process p
where s.paddr = p.addr and (s.username=u_name);
BEGIN
SELECT USERENV('SID') into u_cursid FROM DUAL;
u_name:='数据库名称';
OPEN c1;
LOOP
FETCH c1 INTO u_sid,u_serialnumber;
EXIT WHEN c1%NOTFOUND;
if(u_sid != u_cursid) then
EXECUTE IMMEDIATE 'alter system kill session '||''''||trim(u_sid)||','||trim(u_serialnumber)||'''';
End if;
END LOOP;
END;
注:
1.我此段脚本是在navicat中执行的所以要排出我当前navicat链接的会话,如要删除所有会话则注释掉,下两行代码即可
if(u_sid != u_cursid) then
End if;