日期:2014-05-16  浏览次数:20506 次

Oracle删除正在连接用户
方式一

-- 1、首先切换到  SYS 用户

-- 2、查询用户各进程相对应的 sid、serial#。注意:这里的 username 必须大写

SELECT sid,serial#,username FROM v$session WHERE username = 'POWER';

-- 下面是查询结果

       SID    SERIAL# USERNAME
---------- ---------- ------------------------------
       120      61422 POWER
       131      62682 POWER
       133      45409 POWER
       148      38527 POWER
       157      21137 POWER

-- 3、根据上面的查询结果,将用户占用的所有进程杀掉。注意: sid 与 serial# 是一一对应的

ALTER SYSTEM KILL SESSION '120, 61422';
ALTER SYSTEM KILL SESSION '131, 62682';
ALTER SYSTEM KILL SESSION '133, 45409';
ALTER SYSTEM KILL SESSION '148, 38527';
ALTER SYSTEM KILL SESSION '157, 21137';

-- 4、删除用户

DROP USER POWER CASCADE;




方式二


-- 1、PL/SQL 下执行以下语句,杀掉用户占用的所有进程
DECLARE
   u_sid  varchar2(50);
   u_serialnumber varchar2(50);
   u_name varchar2(50);
   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
   -- 替换用户名 POWER,必须大写
   u_name:='POWER';
   OPEN c1;
   LOOP
      FETCH c1 INTO u_sid,u_serialnumber;
      EXIT WHEN c1%NOTFOUND;
      EXECUTE IMMEDIATE 'alter system kill session '||''''||trim(u_sid)||','||trim(u_serialnumber)||'''';
   END LOOP;
END;


-- 2、OK,现在可以删除用户了

DROP USER POWER CASCADE


-- 此外,可以用下面的语句查看所有用户的连接信息
select s.username,s.osuser,s.program,s.MACHINE, s.sid, s.serial#, p.spid,
       'alter system kill session '||''''||trim(s.sid)||','||trim(s.serial#)||''';' as killSentence
from v$session s,v$process p
where s.paddr = p.addr   and s.username is not null;