【问题标题】:How to kill running sessions of a user in oracle with single sql query?如何使用单个 sql 查询杀死 oracle 中用户的正在运行的会话?
【发布时间】:2019-11-16 05:26:08
【问题描述】:

我想自动化以下场景 -

Kill all of sessions of a user.

我想在单个 sql 查询中实现这一点。我查看了Dropping connected users in Oracle database,其中一个 cmets 给出了单个 sql 查询,但这无助于终止单个查询中的所有会话。

有人可以帮助我通过单个查询来终止用户的所有会话吗?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    简单地说(据我所知),你不能那样做。

    会话被一个接一个地杀死,而不是all-sessions-for-user

    如果您想使用一行代码(作为最终结果)来完成这项工作,请创建一个存储过程来为您完成这项工作。

    以有权执行此操作的用户身份连接(例如 SYS,除非您为此创建了自己的用户):

    SQL> set serveroutput on;
    SQL> create or replace procedure p_kill (par_username in varchar2) is
      2    l_str varchar2(100);
      3  begin
      4    for cur_r in (select s.sid, s.serial#
      5                  from v$session s
      6                  where s.username = par_username
      7                 )
      8    loop
      9      l_str := 'alter system kill session ' || chr(39) ||
     10                cur_r.sid || ', '|| cur_r.serial# || chr(39);
     11      dbms_output.put_line(l_str);
     12      execute immediate l_str;
     13    end loop;
     14  end;
     15  /
    
    Procedure created.
    

    我有两个用于用户 MIKE 的会话(在两个单独的 SQL*Plus 窗口中打开),我想将它们全部杀死:

    SQL> exec p_kill ('MIKE');
    alter system kill session '12, 133'
    alter system kill session '139, 265'
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    这对 MIKE 有什么影响?像这样:

    SQL> select * From tab;
    select * From tab
    *
    ERROR at line 1:
    ORA-00028: your session has been killed
    
    
    SQL>
    

    所以,如您所见,最后这就是您所需要的:

    exec p_kill ('MIKE');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-14
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      相关资源
      最近更新 更多