如何杀死连接到我的oracle数据库的所有会话?

BIB*_*IBD 29 oracle session sqlplus kill database-administration

我需要快速(和强制)杀死连接到我的oracle数据库的所有外部会话,而无需管理员和管理员.

我不想只是锁定数据库,让用户优雅地退出.

我该如何编写脚本?

BIB*_*IBD 44

这个答案很大程度上受到对话的影响:http://www.tek-tips.com/viewthread.cfm? qid = 1395151& page = 3

ALTER SYSTEM ENABLE RESTRICTED SESSION;

begin     
    for x in (  
            select Sid, Serial#, machine, program  
            from v$session  
            where  
                machine <> 'MyDatabaseServerName'  
        ) loop  
        execute immediate 'Alter System Kill Session '''|| x.Sid  
                     || ',' || x.Serial# || ''' IMMEDIATE';  
    end loop;  
end;
Run Code Online (Sandbox Code Playgroud)

我跳过了源自数据库服务器的杀戮会话,以避免杀死Oracle与自身的连接.


Gai*_*ius 11

作为SYS:

startup force;
Run Code Online (Sandbox Code Playgroud)

残酷而优雅.


小智 7

在杀死会话之前,如果可能的话

ALTER SYSTEM ENABLE RESTRICTED SESSION;
Run Code Online (Sandbox Code Playgroud)

阻止新会话连接.


Tho*_*att 5

我一直在使用这样的东西来终止我在共享服务器上的会话。可以删除“where”的第一行以终止所有非“sys”会话:

BEGIN
  FOR c IN (
      SELECT s.sid, s.serial#
      FROM v$session s
      WHERE (s.Osuser = 'MyUser' or s.MACHINE = 'MyNtDomain\MyMachineName')
      AND s.USERNAME <> 'SYS'
      AND s.STATUS <> 'KILLED'
  )
  LOOP
      EXECUTE IMMEDIATE 'alter system kill session ''' || c.sid || ',' || c.serial# || '''';
  END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)