
У меня возникла странная проблема, когда я пытаюсь подключиться к 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.
Нить:
Из темы:
Да, я исправил эту проблему.
Мой сервер Windows 2008 был настроен на отклонение привязок SASL LDAP (см. предупреждение 2886).
Поскольку я настроил свой сервер так, чтобы он не отклонял такие привязки, соединения SQL Server 2008 работают корректно.
Информацию об изменении настроек подписи LDAP можно найти в статье Microsoft KB 935834 (не могу дать ссылку, так как я новый пользователь).
Надеюсь, поможет!
решение4
Можете ли вы попробовать запустить SQL Profiler перед первым подключением с помощью VS или SSMS и посмотреть, что происходит на SQL Server?
Кроме того, проверяли ли вы журналы событий, чтобы увидеть, регистрируется ли что-нибудь?