Назад | Перейти на главную страницу

Тайм-аут SQL Server при первой попытке

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

Время ожидания истекает при первой попытке подключения. Вторая попытка работает нормально.

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

Я надеюсь, что в этом есть смысл.

Любой совет?

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

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

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

  • Динамические порты 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

Я предполагаю, что у вас есть AUTO_CLOSE Включен для базы данных. Это означает, что база данных должна раскручиваться при подключении, что и вызывает начальный тайм-аут.

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

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

Похоже на дальний выстрел в темноте с повязкой на глаза, но это может помочь. На форумах разработчиков 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 работают правильно.

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

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

Отключите брандмауэр. Тестовая сеть (пинг). Обнюхивать сетевой трафик на сервер sql (используйте WireShark)

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

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