oracle存储过程:删除除当前会话外所有会话

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值