Ticker

6/recent/ticker-posts

Matar sessão pelo SO - WINDOWS

Alguma vez já precisou matar uma sessão do banco diretamente no sistema operacional? Acredito que a maior parte das respostas é sim e este processo é bastante comum.

O processo em ambiente linux/unix é bastante simples através do kill -9. Mas e no windows como posso fazer esse processo???

Você pode estar pensando em utilizar o gerenciador de tarefas, porém.. Via gerenciador de tarefas, não é possível identificar a sessão uma vez que todas ficam agrupadas no executável "oracle.exe".

Saiba que para o sistema operacional windows a Oracle disponibiliza o utilitário orakill, que permite "matar" uma sessão diretamente do prompt DOS, sem a necessidade de uma conexão direta com o banco de dados.

O orakill é bastante simples de ser utilizado

C:\oracle9i\bin>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

Usando a query acima é abaixo pegar o SPID da sessão e então "mata-la" através do comando orakill.



SELECT p.SPID, s.OSUSER, s.PROGRAM
FROM V$PROCESS p JOIN V$SESSION s
ON p.ADDR= s.PADDR
WHERE s.USERNAME IS NOT NULL;

SPID  OSUSER               PROGRAM
----- -------------------- -------------
1328  LAMIM\teste        sqlplus.exe
1788  LAMIM\teste        sqlplus.exe
2008  LAMIM\teste        sqlplusw.exe
2228  LAMIM\teste        sqlplusw.exe

Consulta via prompt

D:\>orakill lamimtst 1328
Kill of thread id 1328 in instance LAMIMTST successfully signalled.

SELECT p.SPID, s.OSUSER, s.PROGRAM
FROM V$PROCESS p JOIN V$SESSION s
ON p.ADDR= s.PADDR
WHERE s.USERNAME IS NOT NULL;

SPID  OSUSER               PROGRAM
----- -------------------- -------------
1788  LAMIM\teste        sqlplus.exe
2008  LAMIM\teste        sqlplusw.exe
2228  LAMIM\teste        sqlplusw.exe

Agora ao se perguntar o porque de "matar" a sessão pelo SO, segue o motivo em ingles:
1. The alter system statement will not clear any locks that exist. Instead, the session will remain connected until it times out, then the session is killed and the locks are released. The orakillcommand will kill the thread and the locks instantly.  (Check out the comments of Yasin about this case  )
2. A DBA may be unable to gain access to a SQL prompt due to a runaway query consuming all database resources. In this case, the session can be killed without ever logging in to the database.

Postar um comentário

0 Comentários