经常在服务器上做一些工作,当重新恢复库时,会先删掉用户xxx。
但是每次drop user xxx cascade时,总是提示有还在连接的用户。在网上查了,很多人给出办法都是将用户的sid,serial#对应的kill掉,可是这种方法只是去一条一条有目的的去删除。我想问有没有其他方法,就是像db2那样断掉所有连接的用户。请高手帮忙解答。希望不要在次给出类似于查sid,然后去断掉session号的答案。还有就是停掉服务什么的。
我只是想问有没有断掉正在连接的所有用户的语句。谢谢

解决方案 »

  1.   

    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#)||''';'
    from v$session s,v$process p
    where s.paddr = p.addr   and s.username is not null; 
      

  2.   

    declare
        v_sql varchar2(500);
        cursor cur_sql is
         select 
          'alter system kill session '||''''||trim(s.sid)||','||trim(s.serial#)||''''
    from v$session s,v$process p
    where s.paddr = p.addr  and s.username is not null; 
    begin
         open cur_sql;
         loop
            fetch cur_sql into v_sql;
            exit when cur_sql%notfound ;
            dbms_output.put_line(v_sql);
            execute immediate v_sql;   
         end loop;
    end;
    end;
      

  3.   

    就楼主地方问个问题
    为什么要加个username is not null呢
      

  4.   


    还记得你刚刚问过的问题v$session里有null的是什么进程。要断掉用户的连接,可以kill session
      

  5.   

    恩,同意5楼看法! 首先,select * from v$session;然后kill 掉相应的session ; 
      
      

  6.   

    服务是啥操作系统?如果是unix/linux/aix可以在服务器上执行
    kill -9 `ps -aef|grep oracle|grep -v grep|grep LOCAL=NO|awk '{print $2}'`
      

  7.   

    写个存储过程循环输出相应的语句,然后telnet上去执行,做之前先用sysdba把数据库设置到restrict状态,避免新用户登陆,然后再执行其他操作
      

  8.   


    这个保证你kill掉所有进程后没有别人可以连上来,除了sysdba