2012-03-27 2 views
11

Да, ребята, это снова.SQL Server: «соединение было успешно установлено с сервером .... существующее соединение было принудительно закрыто удаленным хостом».

"A connection was successfully established with the server, but then an error occurred during the login process (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)"

Я сожалею ... Я есть Google'd это, я есть прочитать другие статьи StackOverflow по этой проблеме, и я есть испробовали все виды предложений, но ничего не работает ,

Вот несколько заметок о том, что мы видим.

  1. Эта проблема возникает в случайне среды SQL Server Management Studio, сами (делают любой вид деятельности базы данных ... получить список таблиц в базе данных, имея взгляд на хранимую процедуре и т.д.)

  2. это также происходит в Visual Studio 2010 сам, когда он пытается получить данные из серверов (например, при создании .dbml файла и т.д.)

  3. это иногда случается в нашей .Net (ASP , WPF, Silverlight) Приложения.

  4. Наши серверы SQL Server 2005 & 2008 все основаны на виртуальных машинах в центрах обработки данных по всему миру, и мы иногда видим эту ошибку для каждого из них. Но большую часть времени все они работают нормально.

  5. Когда ошибка возникает, мы можем просто «повторить», что вызвало ошибку, и тогда она будет работать нормально.

  6. Мы считаем, что .. если у нас есть веб-сервер IIS в центре обработки данных в конкретном городе, и он обращается к SQL Server в одном центре обработки данных, то мы не видеть проблему.

  7. Мы думаем .. Если мы подключаемся к серверам и указываем UserID и пароль для использования, это вызывает эту ошибку гораздо чаще, чем если бы мы просто использовали аутентификацию Active Directory.

Поместите все это вместе, и это звучит для меня как некая сетевая проблема.
Но может ли кто-нибудь предложить, что искать?

Это не ошибка в наших приложениях .Net, так как даже Студия управления SQL Server «отключается» с этой ошибкой.

Это нас смущает.

+0

плохой сетевой адаптер, или, возможно, 2 машины в сети с одинаковым IP-адресом? –

ответ

1

Это может быть любое количество проблем с сетью. НИЧЕГО, что предотвращает доступ кода к серверу даже для нескольких миллисекунд, которые требуется для создания одного запроса.

это также может быть результатом отказа. Когда мы перешли от одного SQL Server к кластерной среде, мы увидели бы это во время перехода на другой ресурс. В этом случае это оказалось нашим пулом соединений. По сути, кластер SQL имеет контроллер и два сервера позади него. A и B.

Скажите, что наше веб-приложение использует сервер. Просто отлично. Пул соединений создает соединение с обеих сторон.Сервер знает об этом, и веб-приложение знает об этом. После отказа кластера со вторым сервером веб-приложение знает о соединении, но сервер B не работает, поэтому мы получаем ошибку.

Дело в том, что причиной может быть любая возможная причина возникновения сетевых проблем. Атаки DOS на сервер, межличностные атаки, перехватывающие и изменяющие трафик. Кто-то ездит по кабелю Ethernet, и он свободен в гнезде. Вы называете это, если это может вызвать проблему подключения, это может быть причиной.

Ваша проблема также звучит так, как у нас недавно - у нас также есть виртуальная среда с программным обеспечением, которое перемещает виртуальные машины с одного хоста на другой, как это необходимо для балансировки нагрузки. Каждый раз так часто мы подвергались бомбардировке с той же ошибкой. Оказалось, что проблема связана с драйверами NIC на одном из хостов, поэтому всякий раз, когда VM перемещается на этот конкретный хост, будут возникать ошибки.

Это действительно не проблема программирования. Это проблема окружающей среды, и вам нужны обученные специалисты, имеющие прямой доступ к вашей среде для исследования и решения этой проблемы.

+1

Возможно, вы можете предложить некоторые методы отладки или программное обеспечение для отслеживания источника проблемы в других средах? – mellamokb

6

Только в случае, если кто-то попадает этот вопрос, мы, наконец, нашли решение.

Наша компания использует Riverbed программное обеспечение для сжатия данных, когда оно передается между местоположениями, и это как-то заставляло некоторые соединения отбрасываться.

Наши ИТ-гуру нашли настройку конфигурации, которая в конечном итоге устранила эту проблему.

Я считаю, что есть параметр, чтобы отключить сжатие результатов SQL Server (или что-то в этом роде). Это нашло это для нас.

0

Это происходило в нашем коде, когда мы открывали dbconnection для oracle и передавали DBtype как SQL в нашем объекте базы данных.

1

Проблема была в том, что я случайно использовал беспроводную сеть для подключения к нашей сети, поскольку кабель Ethernet был неисправен. Это после восстановления SQL Server, перезапуск Winsock, как рекомендовано в других местах ...

1

У меня такая же проблема, и наше приложение взаимодействует с несколькими базами данных Azure SQL. Я верю (так же, как и вы). У меня нет ошибки в коде C#, чтобы вызвать эту проблему. Мы решили это простым для цикла, содержащего дополнительные попытки попытаться подключиться к Azure SQL снова, если предыдущая попытка завершилась неудачно, а затем запустите запрос.

В большинстве случаев все работает нормально, но иногда мы можем видеть, что петля была запущена, и на 2-й или 3-й раз, когда она выполнена правильно, без указанной ниже ошибки. После того, что мы видим в файле журнала ошибка ниже для всех неудачных попыток:

A connection was successfully established with the server, 
but then an error occurred during the login process. (provider: TCP 
Provider, error: 0 - An existing connection was forcibly closed by the 
remote host.) 

Несмотря на то, что это менее то некрасиво решение, это позволило нам запустить наше приложение без перерывов. Я знаю, что вы уже упоминали, что попытка снова подключиться (чтобы ввести некоторый терпимость к соединению) решает проблему, и, к сожалению, это единственное правильное решение, которое я нашел до сих пор.

Я должен упомянуть, что мы пробовали много стратегий отладки, чтобы понять это.Теперь все указывает на доступность базы данных, которую мы пытаемся подключить к i.e: Это произойдет, если превышено количество допустимых подключений БД. (или так кажется в это время)

+0

эта ошибка также произошла со мной с SQL Azure, но я реальная проблема в том, что у меня было слишком долгое соединение при отладке - разрешение запуска приложения нормально работало нормально. Может просто увеличить таймаут соединения - 'SqlConnection.ConnectionTimeout', а не' CommandTimeout'. – SliverNinja

0

в моем случае - ошибка была предложена Microsoft: Клиент соединяется с неподдерживаемой версией собственного клиента SQL Server.