En muchas ocasiones tenemos la necesidad de matar una o varias sesiones de un usuario en una base de datos Oracle, las sesiones de usuario las tenemos que matar desde Oracle y no desde el Sistema Operativo, a veces podemos realizarlo desde el Sistema Operativo si no lograr ser eliminadas desde Oracle.
Lo primero que vamos a hacer es identificar la sesión de usuario que queremos que matar, para ello utilizamos la siguiente Query:
SQL> select a.USERNAME, a.SID, a.SERIAL#, b.SPID
from v$session a, v$process b
where a.PADDR= b.ADDR order by 1;
La salida será algo parecido ha esto:
USERNAME SID SERIAL# SPID
----------- ---- ------- ------
TUUSUARIO_1 108 3917 56061
TUUSUARIO_2 158 58 51062
TUUSUARIO_3 41 4647 14649
Esta Select nos devuelve el nombre de usuario, el número de proceso Oracle, el número serial del proceso Oracle y el PID del proceso Oracle en el Sistema Operativo.
Una vez tengamos identificada la sesión que queremos matar utilizamos la siguiente instrucción desde SqlPlus.
SQL> ALTER SYSTEM KILL SESSION 'SID, SERIAL#';
Ejemplo:
SQL> ALTER SYSTEM KILL SESSION '108, 3917';
Es posible que la sesión no muera de forma inmediata ya que puede que se este realizando alguna transacción, esto dependerá de lo que estuviera realizando el usuario.
A veces puede ocurrir que la sesión nunca muera por que se haya quedado zombi, en ese caso tendremos que matarla desde el promt del Sistema Operativo, para ello utilizaremos el PID que tenemos en la columna SPID.
Ejemplo para Unix/Linux
$kill -9 56061