Произошла ошибка транспортного уровня... (существующее соединение закрыто сервером) Sql Server 2008

У меня есть веб-приложение, которое в настоящее время работает в операционной системе Windows XP с базой данных SQL Server 2005 и IIS 6.0.

Теперь мы пытаемся обновить его до IIS 7.0 в базе данных Windows Server 2008 и SQL Server 2008.

Когда я запускаю приложение, он бросает "Произошла ошибка транспортного уровня при отправке запроса на сервер (поставщик: поставщик TCP, ошибка: 0 - существующее соединение было принудительно закрыто удаленным хостом)." Случайно в различные вызовы базы данных.

Я проверил использование "sp_who", что открыто только одно соединение, которое я использую.

Может ли кто-нибудь сказать мне, что может быть причиной этой проблемы?

Ответы

Ответ 2

Возможно, база данных настроена на автоматическое закрытие? Это было стандартным для баз данных, созданных в старой версии MSDE/Express.

ALTER DATABASE YourDatabaseName SET AUTO_CLOSE OFF;

Больше:

Обзор SQL Server 2005 Express Edition:

Функции, такие как Auto-Close и возможность копирования баз данных в виде файлов, по умолчанию включены в SQL Server Express...

Я не могу вспомнить, какой пакет обновления изменил значение по умолчанию, но новый интерфейс базы данных в версии SP3 для Management Studio Express по умолчанию имеет значение Auto Close на false.

Ответ 3

Это ошибка, возникающая при подключении к базе данных из-за ошибки сетевого уровня более низкого уровня, которую вы не можете обработать с Sql Server.

Было бы замечательно, что API, используемый для conenct, обрабатывал эту ошибку, но AFAIK это не так. Единственный способ решить эту проблему - повторить попытку подключения к базе данных при возникновении этой ошибки.

Вы должны попытаться повторно подключиться, по крайней мере, пару раз, чтобы убедиться, что ошибка не является постоянной, и если это так, то генерируйте исключение. Мой опыт подсказывает мне, что вы пытаетесь восстановить соединение, в 99,9% случаев вы преуспеете.

Ответ 4

Часто он находится в автономном режиме/закрыт или SQL-экземпляр перезапускается/отключен

Ответ 5

Ошибки уровня транспорта часто связаны с подключением к серверу sql, который прерывается... обычно в сети.

Время ожидания истекает, как правило, возникает, когда SQL-запрос занимает слишком много времени для запуска. Это сценарий в вашем случае? Как хранимый proc занимает слишком много времени для выполнения или есть пакетные задания, которые выполняются?

Ответ 6

В моем случае. У нас есть DELL R720, сетевые платы находятся на борту и PCI Broadcom NetXtreme Gigabit Ethernet. Мы сталкиваемся с двумя проблемами.

  • Скорость сети очень велика для виртуальных машин HyperV. Решение состоит в том, чтобы отключить "очереди виртуальной машины" в окнах свойств Broadcom nic HyperV. Он находится на вкладке "Дополнительно".

  • Клиент SQL, имеющий этот уровень транспортного уровня. Это случалось только раз в 10-15 мин. В то же время служба RDP время от времени выкидывает клиента. Решение состоит в том, чтобы отключить "Large Send Offload V2" окна свойств Broadcom nic HyperV. Он находится на вкладке "Дополнительно".

Ответ 7

Используйте clearpool (urSQLconnection) вместе с утилитой. Это очистит грязное соединение. и вы можете открыть новое соединение.

Ответ 8

Получил это при попытке выполнить команды из нескольких потоков на одном объекте соединения в .net, что было глупой ошибкой. Блокировка или использование отдельного соединения для каждого потока исправляет это.

Ответ 9

Проверьте, установлен ли MultipleActiveResultSets=true; в строке подключения.