Como matar todas as sessões de oráculo activas e inactivas para o utilizador

estou a tentar o programa abaixo para matar todas as sessões activas e inactivas do oráculo para o utilizador ao mesmo tempo, mas não funciona. O programa executa com sucesso, mas não desliga as sessões para o utilizador.

BEGIN
  FOR r IN (select sid,serial# from v$session where username = 'USER')
  LOOP
    EXECUTE IMMEDIATE 'alter system kill session ''' || r.sid 
      || ',' || r.serial# || '''';
  END LOOP;
END;
Author: Andrew, 2015-07-03

3 answers

O comando KILL SESSION não mata realmente a sessão. Apenas pede à sessão que se mate. Em algumas situações, como esperar por uma resposta de um banco de dados remoto ou rolando para trás as transações, a sessão não vai se matar imediatamente e vai esperar que a operação atual para terminar. Nestes casos, a sessão terá um status de " marcado para matar ". Será então morto o mais rapidamente possível.

Verifique o estado para confirmar:

SELECT sid, serial#, status FROM v$session;

Também pode usar cláusula imediata:

ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;

A cláusula IMMEDIATE não afecta o trabalho realizado pelo comando, mas devolve o controlo imediatamente à sessão actual, em vez de esperar pela confirmação da morte. Dê uma olhada em matando sessões Oracle .

Actualizar Se quiser matar todas as sessões, pode apenas preparar um pequeno guião.

SELECT 'ALTER SYSTEM KILL SESSION '||sid||','||serial#||';' FROM v$session;

Spool O acima para a .sql arquivar e executá-lo.

 11
Author: Lalit Kumar B, 2015-07-03 11:48:06
BEGIN
  FOR r IN (select sid,serial# from v$session where username='user')
  LOOP
      EXECUTE IMMEDIATE 'alter system kill session ''' || r.sid  || ',' 
        || r.serial# || ''' immediate';
  END LOOP;
END;

Isto deve funcionar-acabei de mudar o teu guião para adicionar a palavra-chave immediate. Como as respostas anteriores apontavam, o {[2] } só marca as sessões para matar; não o faz imediatamente, mas mais tarde, quando conveniente.

Pela sua pergunta, parecia que esperava ver o resultado imediatamente. Então immediate A Palavra-chave é usada para forçar isto.
 11
Author: noname.c, 2017-07-05 16:38:12

Execute este programa:

SELECT 'ALTER SYSTEM KILL SESSION '''||sid||','||serial#||''' IMMEDIATE;' 
FROM v$session 
where username='YOUR_USER';

Irá imprimir o sqls, que deverá ser executado.

 4
Author: elkoo, 2017-06-02 09:34:55