Истекло время ожидания SQL Server при первой попытке

Истекло время ожидания SQL Server при первой попытке

У меня возникла странная проблема, когда я пытаюсь подключиться к SQL Server 2008, работающему на втором компьютере (обе машины работают под управлением Win7 64-бит), либо через источники данных в Visual Studio, либо через саму консоль управления SQL.

При первой попытке подключения происходит тайм-аут. Вторая попытка проходит нормально.

Я могу получить доступ к общим ресурсам на втором компьютере без каких-либо затруднений, просто, похоже, это первый раз, когда я пытаюсь подключиться к SQL для каждого экземпляра приложения. То есть, если я открою два экземпляра Visual Studio, оба потерпят неудачу при первой попытке подключения, но успешно при второй. Мне приходится подключаться дважды для каждого экземпляра (независимо от последовательности неудач/успехов в любом другом приложении).

Надеюсь это имеет смысл.

Любой совет?

решение1

Думаю, я нашел решение, по крайней мере, в моем случае оно работает. Я использую имя экземпляра, и это автоматически подразумевает динамический порт для службы сервера SQL. Я изменил настройки с динамического на фиксированный порт, а затем открыл брандмауэр на этом порту.

Диспетчер конфигурации SQL Server --> Конфигурация сети SQL Server --> Протоколы для «ИмяЭкземпляра» --> TCP/IP --> Свойства --> IP-адреса --> Все IP-адреса -->

Здесь вы видите два варианта:

  • Динамические порты TCP: 51250 (генерируются случайным образом)
  • TCP-порт: пусто - я указал здесь 1433, а затем открыл брандмауэр (на случай, если он еще не открыт). Вы можете указать любой порт, который хотите (я указал 1433, потому что это был единственный экземпляр. В случае нескольких экземпляров вам следует выбрать для каждого экземпляра другой порт, а затем открыть их в брандмауэре)

Скрипт, который облегчает вам задачу открытия портов, я скачал с сайта MS и воспроизвожу его здесь (комментарии на немецком языке, но они должны быть очевидны):

@echo =========  Ports des SQL-Servers  ===================
@echo Aktivieren von Port 1433 für die SQLServer-Standardinstanz
netsh firewall set portopening TCP 1433 "SQLServer" 
@echo Aktivieren von Port 1434 für dedizierte Administratorverbindungen
netsh firewall set portopening TCP 1434 "SQL-Administratorverbindung" 
@echo Aktivieren von Port 4022 für den konventionellen SQL Server-Service Broker  
netsh firewall set portopening TCP 4022 "SQL-Service Broker" 
@echo Aktivieren von Port 135 für Transact-SQL-Debugger/RPC 
netsh firewall set portopening TCP 135 "SQL-Debugger/RPC" 
@echo =========  Ports für Analysedienste  ==============
@echo Aktivieren von Port 2383 für die SSAS-Standardinstanz
netsh firewall set portopening TCP 2383 "Analysedienste" 
@echo Aktivieren von Port 2382 für den SQL Server-Browserdienst
netsh firewall set portopening TCP 2382 "SQL-Browser" 
@echo =========  Verschiedene Anwendungen  ==============
@echo Aktivieren von Port 80 für HTTP 
netsh firewall set portopening TCP 80 "HTTP" 
@echo Aktivieren von Port 443 für SSL
netsh firewall set portopening TCP 443 "SSL" 
@echo Aktivieren des Ports für die Schaltfläche 'Durchsuchen' des SQL Server-Browserdiensts
netsh firewall set portopening UDP 1434 "SQL-Browser" 
@echo Zulassen von Multicast-/Broadcastantwort auf UDP (Aufzählung der Browserdienste OK)
netsh firewall set multicastbroadcastresponse ENABLE

решение2

Я думаю, что у вас естьАВТО_ЗАКРЫТЬВключено для базы данных. Это означает, что база данных должна раскручиваться при подключении, что и вызывает начальный тайм-аут.

Второе предположение заключается в том, что это может быть связано с разрешением имени хоста. Поэтому разрешение имени хоста в первый раз занимает слишком много времени (может быть, с помощью широковещательной передачи?), но затем кэшируется при последующих попытках подключения. Что вы используете для разрешения хоста? Это в DNS? Попробуйте изменить строку подключения на формат IP, порт. Например, 192.168.100.100,1433

Вы также можете попробовать запустить ipconfig /flushdnsпосле успешной попытки подключения и посмотреть, получите ли вы то же самое поведение. Хитрый обходной путь — поместить поиск в ваш файл HOSTS, но вы должны исправить это должным образом.

решение3

Похоже на дальний выстрел в темноте с повязкой на глазах, но это может помочь. На форумах разработчиков Microsoft SQL есть старая ветка, описывающая, похоже, ту же проблему, а также возможное решение. Его сервер работает под управлением Windows Server 2008, но может быть релевантным и для вашей конфигурации Win7.

Нить:

http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/58bd9c4d-0572-4567-8e32-82a7fd600022

Из темы:

Да, я исправил эту проблему.

Мой сервер Windows 2008 был настроен на отклонение привязок SASL LDAP (см. предупреждение 2886).

Поскольку я настроил свой сервер так, чтобы он не отклонял такие привязки, соединения SQL Server 2008 работают корректно.

Информацию об изменении настроек подписи LDAP можно найти в статье Microsoft KB 935834 (не могу дать ссылку, так как я новый пользователь).

Надеюсь, поможет!

решение4

Можете ли вы попробовать запустить SQL Profiler перед первым подключением с помощью VS или SSMS и посмотреть, что происходит на SQL Server?

Кроме того, проверяли ли вы журналы событий, чтобы увидеть, регистрируется ли что-нибудь?

Связанный контент