Removendo conexões
O pooler de conexões remove uma conexão do pool após ficar inativo por um longo período de tempo ou se o pooler detectar que a conexão com o servidor foi cortada.
Observe que uma conexão cortada pode ser detectada somente após a tentativa de comunicação com o servidor. Se for encontrada uma conexão que não está mais conectada ao servidor, ela será marcada como inválida.
As conexões inválidas são removidas do pool de conexões somente quando são fechadas ou recuperadas.
Se existir uma conexão com um servidor que desapareceu, essa conexão poderá ser estabelecida no pool, mesmo que o pooler de conexões não tenha detectado a conexão cortada e marcado como inválido.
É esse o caso, porque a sobrecarga de verificar se a conexão ainda é válida eliminaria os benefícios de ter um pooler, causando outra ocorrência de ida e volta ao servidor.
Quando isso ocorre, a primeira tentativa de usar a conexão detectará que a conexão foi cortada e uma exceção será lançada.
Basicamente, o que você está vendo é essa exceção na última frase.
Uma conexão é obtida do pool de conexões, o aplicativo não sabe que a conexão física se foi, uma tentativa de usá-la é feita sob a suposição de que a conexão física ainda está lá.
E você recebe sua exceção.
Existem alguns motivos comuns para isso.
- O servidor foi reiniciado, isso fechará as conexões existentes.
Nesse caso, consulte o log do SQL Server, geralmente encontrado em: C: \ Arquivos de Programas \ Microsoft SQL Server \\ MSSQL \ LOG
Se o registro de data e hora da inicialização for muito recente, podemos suspeitar que foi isso que causou o erro. Tente correlacionar esse carimbo de data / hora com o horário da exceção.
2009-04-16 11: 32: 15.62 Servidor Registrando mensagens do SQL Server no arquivo 'C: \ Arquivos de Programas \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERRORLOG'.
- Alguém ou alguma coisa matou o SPID que está sendo usado.
Mais uma vez, dê uma olhada no log do SQL Server. Se você encontrar uma morte, tente correlacionar esse carimbo de data / hora com o horário da exceção.
16-04-2009 11: 34: 09.57 spidXX O ID do processo XX foi eliminado pelo nome do host xxxxx, ID do processo do host XXXX.
- Há um failover (em uma configuração de espelho, por exemplo) novamente, consulte o log do SQL Server.
Se houver um failover, tente correlacionar esse carimbo de data / hora com o horário da exceção.
16-04-2009 11: 35: 12.93 spidXX O banco de dados espelhado “” está alterando as funções de “PRINCIPAL” para “MIRROR” devido ao Failover.