Dejare estas querys y comandos a modo de recordatorio por si algún día los vuelvo a necesitar o en caso de que alguien mas necesite de ellos.
Por DOS (ambiente windows) es posible matar una conexion especifica de oracle, mediante el comando orakill que especifica lo siguiente:
C:\>orakill
Usage: orakill sid thread
where sid = the Oracle instance to target
thread = the thread id of the thread to kill
The thread id should be retrieved from the spid column of a query such as:
select spid, osuser, s.program from
v$process p, v$session s where p.addr=s.paddr
Con este comando puedes terminar (kill -9) cualquier conexión activa hacia Oracle.
Bien, ahora como obtenemos estos parametros, primero el parametro sid. El nombre sid nos confunde, pero en realidad es el nombre de la instancia del Oracle, si te conectas a la base de datos y ejecutas la siguiente Query obtenemos ese sid:
select sys_context('USERENV','DB_NAME') as Instance from dual
INSTANCE
-----------
MYINSTANCE
1 record(s) selected [Fetch MetaData: 0/ms] [Fetch Data: 0/ms]
[Executed: 03-06-09 03:16:23 PM CLT ] [Execution: 0/ms]
Ahora necesitamos identificar el spid (thread) de las conexiones que deseamos terminar, para ello tenemos la siguiente Query:
select v.sid, a.SPID, v.serial#, v.username, v.OSUSER, v.program, v.MACHINE, v.LOGON_TIME from user_users u, v$session v, v$process a where v.user# = u.user_id and v.paddr = a.addr SID SPID SERIAL# USERNAME OSUSER PROGRAM MACHINE LOGON_TIME ------ ------- ---------- ----------- --------------- ---------- ------------------- ---------------------- 23 3144 26769 DESARROLLO NETWORK?SERVICE w3wp.exe WORKGROUP\VM_MMANN 03-06-2009 03:19:57 PM 10 3116 2685 DESARROLLO (null) (null) note_vvarela 03-06-2009 10:53:32 AM 13 3720 15823 DESARROLLO (null) (null) note_vvarela 03-06-2009 10:53:37 AM 3 record(s) selected [Fetch MetaData: 0/ms] [Fetch Data: 0/ms] [Executed: 03-06-09 03:17:45 PM CLT ] [Execution: 0/ms]
La salida de esta Query nos entrega la columna SPID y una serie de otras columnas que nos ayudan a identificar el proceso que deseamos terminar. Ojo que esta salida identifica solo a las conexiones activas.
Ahora solo nos resta ejecutar el comando en DOS para matar la conexión activa:
C:\>orakill MYINSTANCE 3144
Si se ejecuta correctamente obtenemos algo como esto:
Kill of thread id 3144 in instance MYINSTANCE successfully signalled.
Saludos