Удаление подключений
Диспетчер подключений удаляет подключение из пула после того, как он долгое время простаивал или если диспетчер обнаружил, что соединение с сервером было разорвано.
Обратите внимание, что разорванное соединение может быть обнаружено только после попытки установить связь с сервером. Если обнаружено соединение, которое больше не подключено к серверу, оно помечается как недействительное.
Недействительные соединения удаляются из пула соединений только тогда, когда они закрыты или восстановлены.
Если существует соединение с пропавшим сервером, это соединение можно извлечь из пула, даже если диспетчер соединений не обнаружил разорванное соединение и пометил его как недействительное.
Это так, потому что накладные расходы на проверку того, что соединение все еще действует, устранят преимущества наличия пула, вызвав еще одну передачу на сервер.
Когда это происходит, первая попытка использовать соединение обнаружит, что соединение было разорвано, и выдается исключение.
По сути, вы видите это исключение в последнем предложении.
Соединение взято из пула соединений, приложение не знает, что физическое соединение разорвано, попытка использовать его выполняется при условии, что физическое соединение все еще существует.
И вы получите свое исключение.
Есть несколько общих причин для этого.
- Сервер был перезапущен, это закроет существующие соединения.
В этом случае посмотрите журнал SQL Server, который обычно находится по адресу: C: \ Program Files \ Microsoft SQL Server \\ MSSQL \ LOG.
Если временная метка для запуска очень недавно, то мы можем подозревать, что именно это вызвало ошибку. Попробуйте соотнести эту временную метку со временем исключения.
2009-04-16 11: 32: 15.62 Сервер регистрирует сообщения SQL Server в файле 'C: \ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERRORLOG'.
- Кто-то или что-то убило используемый SPID.
Опять же, посмотрите в журнал SQL Server. Если вы обнаружите убийство, попробуйте соотнести эту временную метку со временем исключения.
2009-04-16 11: 34: 09.57 spidXX Идентификатор процесса XX был уничтожен именем хоста xxxxx, идентификатор процесса хоста XXXX.
- Снова происходит отработка отказа (например, в настройке зеркала), посмотрите журнал SQL Server.
Если происходит аварийное переключение, попробуйте соотнести эту временную метку со временем исключения.
2009-04-16 11: 35: 12.93 spidXX Зеркальная база данных «» меняет роли с «ОСНОВНОГО» на «ЗЕРКАЛО» из-за сбоя.