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


9

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

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

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

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

Любой совет?


Какой метод именования вы используете для подключения к другому компьютеру, используете ли вы IP-адрес (например, 192.168.1.1) или такое имя, как: MySqlServer. Я подозреваю, что это проблема разрешения имен, вы можете подтвердить это, поместив имя сервера Sql в файл hosts, и в этом случае проблема должна исчезнуть.
Кодирование Gorilla

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

Ответы:


6

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

2

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

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

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


Уже установлено значение off (0) для всех баз данных. Тем не менее, это не просто первая попытка клиента, это первая попытка каждого приложения, работающего на клиенте (поэтому вторая попытка подключения к SQL Studio, пока он работает, я запускаю VS2010, при первом подключении происходит сбой, но при втором ... хотя студия уже подключена и работает).
SergioL

может быть, это связано с разрешением DNS / имени хоста? попробуйте изменить строку подключения для подключения с использованием IP-
адреса

2

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

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


0

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


0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.