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;
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.
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.
immediate
A Palavra-chave é usada para forçar isto.
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.