Por exemplo, para matar a sessao do "zemane" que está consumindo recursos pois foi executada erroneamente, deve-se executar o comando:
SQL> ALTER SYSTEM KILL SESSION 'SID, SERIAL#';Onde SID e SERIAL# são obtidos pelo select abaixo. Acontece que em alguns casos, a sessão morta, continuá lá atrapalhando o banco com o status de KILLED.
SQL> SELECT S.USERNAME, S.MACHINE, S.OSUSER, S.STATUS,Nesses casos, temos que matar o processo no sistema operacional.
S.LAST_CALL_ET LAST, S.SID, S.SERIAL#, P.SPID
FROM V$SESSION S, V$PROCESS P
WHERE S.PADDR = P.ADDR
ORDER BY S.USERNAME, S.MACHINE, S.OSUSER
USERNAME MACHINE OSUSER STATUS LAST SID SERIAL# SPID
--------- -------- --------- -------- ------ ----- ------- ----
LOC_DEV DEV314 jninguem INACTIVE 10494 51 3589 618
LOC_DEV DEV317 zemane ACTIVE 18126 82 21437 222
LOC_HOM SRV004 brockbus INACTIVE 10917 120 19171 123
...
47 rows selected
SQL>alter system kill session '82, 21437' ;
alter system kill succeeded.
SQL> SELECT S.USERNAME, S.MACHINE, S.OSUSER, S.STATUS, ...
USERNAME MACHINE OSUSER STATUS LAST SID SERIAL# SPID
--------- -------- --------- -------- ------ ----- ------- ----
LOC_DEV DEV314 jninguem INACTIVE 10494 51 3589 618
LOC_DEV DEV317 zemane KILLED 18126 82 21437 222
LOC_HOM SRV004 brockbus INACTIVE 10917 120 19171 123
...
47 rows selected
No linux:
$ kill -9 2222Onde 222 é o SPID obtido no select acima.
Agora no windows, acontecem 2 coisas interessantes.
1. O Windows não abre um processo para cada cliente. Os clientes são threads do processo principal (Oracle).
2. Não existe o comando kill no Windows.
Por isso a Oracle disponibilizou o comando ORAKILL <ORACLE_SID> <serial#>
> orakill ORCL 21437Assim o processo é eliminado do banco de dados.
PS. Matar um processo via sistema operacional não deixa log no banco de dados.
Nenhum comentário:
Postar um comentário