Solución:
los KILL SESSION
el comando en realidad no matar La sesión. Simplemente pide a la sesión que se mate. En algunas situaciones, como esperar una respuesta de una base de datos remota o deshacer transacciones, la sesión no se matará inmediatamente y esperará a que se complete la operación actual. En estos casos, la sesión tendrá un estado de “marcado para matar“. Entonces será asesinado lo antes posible.
Verifique el estado para confirmar:
SELECT sid, serial#, status, username FROM v$session;
También podrías usar INMEDIATO cláusula:
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
los IMMEDIATE
La cláusula no afecta el trabajo realizado por el comando, pero devuelve el control a la sesión actual inmediatamente, en lugar de esperar la confirmación del cierre. Eche un vistazo a Killing Oracle Sessions.
Actualizar Si desea eliminar todas las sesiones, puede preparar un pequeño guión.
SELECT 'ALTER SYSTEM KILL SESSION '''||sid||','||serial#||''' IMMEDIATE;' FROM v$session;
Carrete lo anterior a un .sql
y ejecútelo, o copie, pegue el resultado y ejecútelo.
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;
Esto debería funcionar, acabo de cambiar su secuencia de comandos para agregar el immediate
palabra clave. Como se señaló en las respuestas anteriores, el kill session
solo marca las sesiones para matar; no lo hace inmediatamente, sino más tarde cuando es conveniente.
De su pregunta, parecía que esperaba ver el resultado de inmediato. Entonces immediate
La palabra clave se utiliza para forzar esto.
Ejecute este script:
SELECT 'ALTER SYSTEM KILL SESSION '''||sid||','||serial#||''' IMMEDIATE;'
FROM v$session
where username="YOUR_USER";
Imprimirá sqls, que debe ejecutarse.