Oracle Database: cómo matar todas las sesiones de un sql_id

Un único SQL_ID de Oracle Database puede contener múltiples sesiones. En caso de querer matar con alter system kill session cada una de las sesiones no es necesario ir una a una a partir del SID, SERIAL de cada una de ellas.

A través de la siguiente query podemos generar un listado de todas las sesiones de un SQL_ID y ejecutarlas en bloque:

SELECT 'alter system kill session '
|| ''''
|| SID
|| ','
|| SERIAL#
|| ',@'
|| inst_id
|| ''''
|| ' immediate ;'
FROM gv$session
WHERE sql_id = '&sql_id'

La cláusula WHERE especifica que el SQL_ID será el que especifiquemos por STDIN al ejecutar la query. inst_id es el identificador del nodo del RAC en el que se está ejecutando la sesión. El resultado será el listado de todos los alter system kill session que se deben ejecutar.

Si no se trata de un RAC, quitad esa parte:

SELECT 'alter system kill session '
|| ''''
|| SID
|| ','
|| SERIAL#
|| ' immediate ;'
FROM v$session
WHERE sql_id = '&sql_id';

Y si queréis especificar directamente el SQL_ID:

    SELECT 'alter system kill session '
    || ''''
    || SID
    || ','
    || SERIAL#
    || ' immediate ;'
    FROM v$session
    WHERE sql_id = 'dsazjnz378c00';