OraKill – Matar una conexion activa de Oracle

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

Contestar a esta entrada