sexta-feira, 30 de maio de 2008

Sessao Marcada Para Morrer, Para Sempre

Eis uma dica de como eliminar, em bancos de dados Oracle, sessões marcadas para morrer mas que nunca morrem.

Se você tem uma sessão de banco a qual teve de ser assassinada, mas continua agonizando por um longo período, acabe com ela executando o procedimento a seguir.

a) Na plataforma Unix:

SQL> SELECT spid
FROM v$process
WHERE NOT EXISTS ( SELECT 1
FROM v$session
WHERE paddr = addr);


$ kill

b) Na plataforma Windows:

SQL> SELECT spid, osuser, s.program
FROM v$process p, v$session s
WHERE p.addr=s.paddr;

Mate o processo executando no prompt DOS o comando abaixo.

c:\> orakill

A razão pela qual uma sessão continue agonizando e porque ela está aguardando uma resposta do cliente SQLNet. Quando isto acontece o servidor informa que sua sessão foi assassinada e encerra a sessão. O processo pode manter-se ativo até que o cliente encerre o aplicativo.


O PMON pode apropriar-se da sessão enquanto realiza tarefas encerramento da sessão recém assassinada. Se essas tarefas não puderem ser executadas imediatamente, ele manterá a sessão sob um falso processo, enquanto executa outras tarefas.

Encontrando o spid, você pode efetivar a morte do processo. Antes de encerrar um processo, certifique-se de que esse seja um processo dedicado, aqueles denominados "oracle (local=NO)". Certifique-se, também, de que não é um processo do tipo ora_d000_, ora_s000_, ora_pmon_ .

Nenhum comentário: