Bom, antes de tudo necessariamente se observa que " banco de dados extremamente crítico (para o negócio) e 24x7" mas em "10.2.0.3.0" (com o .0 indicando que NENHUM patch foi Aplicado, E sendo 10gr2 absolutamente sem bugfix e PROVAVELMENTE sem Suporte nenhum, já que dificilmente alguém se coça a pagar Suporte Extendido), é uma Contradição em termos - sorry, mas não parece ser tão "crítico" assim, se neguim se habilita a rodar na bamba, sem Suporte algum se der pau....
Isso posto, a resposta : primeira coisa, não sei se vc sabe quando vc faz um ALTER SYSTEM KILL SESSION vc ** não ** está matando a sessão, e sim está mandando ela se matar - assim que puder, ela se matará cfrme vc mandou... A questão é que o KILL foi designado para ser graceful, ie, AVISAR gentilmente o usuário, dando uma mensagem Clara e Auditável para ele tipo "ORA-xxx your session was killed", e para isso ele só encerra efetivamente quando o processo do usuário responde que recebeu e exibiu pro usuário final a mensagem - o "problema" é quando, por qualquer exceção/problema imprevisto o processo que atendia o usuário morreu/ficou bloqueado/ficou irresponsivo : nesse cenário logicamente o RDBMS vai ficar Eternamente esperando a resposta que nunca vai vir... É por isso que se vc ** não tem certeza ** se está tudo OK, o ideal via de regra é pedir um ALTER SYSTEM DISCONNECT SESSION , esse cara não fica esperando por resposta nenhuma, sim ?? Pra este caso que vc já usou o KILL não adianta mais, mas fique sabendo para os próximos... Outra coisa a Avaliar para o futuro é vc avaliar a viabilidade de diminuir o timeout de TCP (que normalmente é longuíssimo no Windows), e no banco implantar DCD e via profile um LIMIT máximo de x horas para as sessões - muitas vezes isso melhora Muitíssimo o tempo que o RDBMS leva para 'perceber' que uma sessão/processo está zumbizando... Continuando : antes de discutirmos , sobre as suas opções ANTES do recycle do database, primeiro de tudo veja em http://www.oracle-base.com/articles/misc/killing-oracle-sessions.php como identificar a sessão e o processo envolvidos. Feito isso, consulte repetidas vezes (com vários minutos de intervalo) a GV$SESSION (veja as colunas de waits/eventos), GV$SESSION_LONGOPS (com um WHERE TIME_REMAINING > 0) e a GV$TRANSACTION para ver se está havando algum progresso no rollback ou seja no que for que a sessão a ser morta tá fazendo... Vale também ver GV$TRANSACTION_ENQUEUE, DBA_PENDING_TRANSACTIONS (se vc usa transações remotas) e GV$LOGSTDBY_TRANSACTION/GV$LOGSTDBY_TRANSACTION/GV$XSTREAM_TRANSACTION se vc usa tais features... Com essa informação na mão : SE não está havendo progresso nenhum, acho que a opção que te resta é tentar matar a task diretamente no SO, sem confiar no ORAKILL : o busílis é que o ORAKILL apenas sinaliza para o process ORACLE.EXE no Windows eliminar a thread especificada... A idéia é (** JUNTO COM SEU SYSADMIN!! **) tentar matar diretamente a thread em questão via Process Explorer : esse cara é um utilitário Externo que a m$soft comprou, veja em http://technet.microsoft.com/en-us/sysinternals//bb545021.aspx ... Eu só não sei se eu Arriscaria meu pescoço fazendo coisas do tipo num ambiente sem Suporte nenhum, como Creio que deve ser o caso : pensa aí se é viável ... []s Chiappa