У меня была такая же проблема с SQL Server 2014 локально установленным именованным экземпляром. Подключение с использованием FQDN\InstanceName
не удастся, а подключение с использованием только моей hostname\InstanceName
работало. Например: подключение с помощью mycomputername\sql2014
сработало, а с помощью - mycomputername.mydomain.org\sql2014
нет. DNS разрешен правильно, TCP / IP был включен в SQL Configuration Manager, добавлены правила брандмауэра Windows (а затем отключил брандмауэр для проверки, чтобы убедиться, что он ничего не блокирует), но ни один из них не устранил проблему.
Наконец, мне пришлось запустить службу « SQL Server Browser » на SQL Server, и это решило проблему с подключением.
Я никогда не осознавал, что служба браузера SQL Server действительно помогает SQL Server устанавливать соединения; У меня сложилось впечатление, что это просто помогло заполнить выпадающие списки, когда вы нажали кнопку «искать больше» для подключения к серверам, но на самом деле помогает выровнять запросы клиентов с правильным номером порта # для использования, если порт № не назначен явно (аналогично как привязки веб-сайтов помогают устранить ту же проблему на веб-сервере IIS, на котором размещены несколько веб-сайтов).
Этот элемент подключения дал мне подсказку о службе браузера SQL Server: https://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine- имя
- когда вы используете wstst05 \ sqlexpress в качестве имени сервера, клиентский код отделяет имя компьютера от имени экземпляра, а wstst05 сравнивается с именем netbios. Я не вижу проблем для них, и соединение считается локальным. Оттуда мы получаем необходимую информацию, не связываясь с браузером SQL, и без проблем подключаемся к экземпляру SQL через общую память.
- Когда вы используете wstst05.capatest.local \ sqlexpress, клиентский код не может сравнить имя (wstst05.capatest.local) с именем netbios (wstst05) и считает соединение «удаленным». Это сделано специально, и мы обязательно рассмотрим улучшение этого в будущем. В любом случае, учитывая, что соединение является удаленным, и тот факт, что это именованный экземпляр, клиент решает, что ему нужно использовать SQLBrowser для разрешения имен. Он пытается связаться с браузером SQL по wstst05.capatest.local (UDP-порт 1434) и, очевидно, эта часть не выполняется. Отсюда и ошибка, которую вы получаете.
Причина службы «Браузер SQL Server» от TechNet (выделено мной): https://technet.microsoft.com/en-us/library/ms181087(v=sql.120).aspx
Из раздела «Использование браузера SQL Server»:
Если служба браузера SQL Server не запущена, вы все равно сможете подключиться к SQL Server, если укажете правильный номер порта или именованный канал. Например, вы можете подключиться к экземпляру SQL Server по умолчанию с TCP / IP, если он работает на порту 1433. Однако, если служба браузера SQL Server не работает, следующие соединения не работают :
- Любой компонент, который пытается подключиться к именованному экземпляру без полного указания всех параметров (таких как порт TCP / IP или именованный канал) .
- Любой компонент, который генерирует или передает информацию сервера \ экземпляра, которая впоследствии может быть использована другими компонентами для повторного подключения.
- Соединение с именованным экземпляром без указания номера порта или канала.
- ЦАП для именованного экземпляра или экземпляра по умолчанию, если не используется порт TCP / IP 1433.
- Служба перенаправления OLAP.
- Перечисление серверов в SQL Server Management Studio, Enterprise Manager или Query Analyzer.
Если вы используете SQL Server в сценарии клиент-сервер (например, когда ваше приложение обращается к SQL Server по сети), если вы останавливаете или отключаете службу браузера SQL Server, вы должны назначить конкретный номер порта каждому экземпляру и напишите код своего клиентского приложения, чтобы всегда использовать этот номер порта. Этот подход имеет следующие проблемы :
- Вы должны обновить и поддерживать код клиентского приложения, чтобы убедиться, что он подключается к нужному порту.
- Порт, который вы выбираете для каждого экземпляра, может использоваться другой службой или приложением на сервере, что делает экземпляр SQL Server недоступным.
И больше информации из той же статьи из раздела «Как работает браузер SQL Server»:
Потому что только один экземпляр SQL Server может использовать порт или каналДля именованных экземпляров, включая SQL Server Express, назначаются разные номера портов и имена каналов. По умолчанию при включении как именованные экземпляры, так и SQL Server Express настроены на использование динамических портов, то есть доступный порт назначается при запуске SQL Server. При желании конкретный порт может быть назначен экземпляру SQL Server. При подключении клиенты могут указать определенный порт; но если порт назначается динамически, номер порта может меняться при каждом перезапуске SQL Server, поэтому правильный номер порта неизвестен клиенту. ... Когда клиенты SQL Server запрашивают ресурсы SQL Server, сетевая библиотека клиента отправляет на сервер сообщение UDP, используя порт 1434. Браузер SQL Server отвечает портом TCP / IP или именованным каналом запрошенного экземпляра.