Не удается подключиться к именованному экземпляру SQL Server с другого SQL Server
Я был бы признателен за помощь, поскольку я застрял на 2 дня в этом вопросе!
Сценарий: я могу подключиться к серверуэкземпляру с моей машины разработки (и других коллег), но не могу подключиться с другого SQL-сервера. Ошибка, которую я получаю, является общей"...проверьте правильность имени экземпляра..". Вещи, которые я сделал / проверил:
Я отключил брандмауэр на целевом (и исходном) сервере, чтобы посмотреть, не является ли это проблемой брандмауэра (это кажется наиболее вероятным, так как я могу подключение с моей машины, но это не помогло).
Я проверил, что SQL Browser работает (что так и есть, поскольку я могу подключиться из машины разработки)
Поскольку оба SQL-сервера имеют несколько экземпляров и жестко закодированные порты, я даже убедился, что они были разными портами, если был какой-то конфликт (это не помогло).
Я перезапустил SQL-сервер и проверил, что службы браузера / экземпляра запущены
Проверенное событие журнал-ничего примечательного
Интересно, что если я не подключаюсь по имени экземпляра, а подключаюсь через динамический порт (т. е. сервер,порт) со второго сервера, он работает нормально - что говорит мне о том, что SQL Browser неисправен, за исключением того, что он работает нормально локально на сервере и с моей машины разработки.
Есть идеи и предложения? Спасибо.
Редактировать: для уточнения комментария, я буду ссылаться на данные SQL Server в качестве SQLA и неинформационными SQLB.
Edit #2: добавление дополнительных тестовых случаев / info:
Информация: все вышеперечисленные тесты были выполнены через интерфейс SSMS для установления соединения с базой данных, задействованные базы данных являются 2012.
Новый тестовый случай: я попытался запустить сценарий для установки связанного сервера вместо этого и обнаружил, что запуск сценария на коробке SQL Server 2005 работает нормально, но запуск того же сценария на сервере SQL Server 2012 (SQLB) не удалось подключиться к SQLA с ошибкой: сеть SQL Server Интерфейсы: ошибка определения местоположения сервера / экземпляра, указанного [xFFFFFFFF].
Edit #3: сужение потенциальной проблемы:
Скачал и запустил PortQry, и при запуске из моего ящика dev я получаю все экземпляры, возвращенные с запросом 1434 по UDP, запуск того же запроса из SQLB не возвращает никаких экземпляров, и он утверждает, что 1434 фильтруется, тогда как в поле dev он возвращается как листинг. Я могу только думать, что это связано с брандмауэром, за исключением того, что я отключил брандмауэр на обеих машинах
9 ответов:
Ваши тестовые случаи,в которых вы не можете подключиться с помощью "Имя_сервера\экземпляра", но можете подключиться к серверу через "Имя_сервера, порт", - это то, что происходит, когда вы подключаетесь к сети с помощью Microsoft VPN. (У меня был этот вопрос). Для МОЕЙ ПРОБЛЕМЫ VPN я просто использую статические номера портов, чтобы обойти ее.
Это, по-видимому, связано с тем, что VPN не пересылает UDP-пакеты, позволяя только TCP-соединения.
В вашем случае ваш брандмауэр или настройки безопасности, или антивирус, или что-то еще может блокировать протокол UDP.
Я бы посоветовал вам проверить настройки брандмауэра , чтобы специально разрешить UDP.
При запуске браузер SQL Server запускается и утверждает порт UDP 1434. язык SQL Браузер-сервер считывает данные из реестра, идентифицирует всех экземпляров SQL-сервера на компьютере и отмечает порты и именованные каналы, которые они используют. Если сервер имеет две или более сетевых карт, браузер SQL Server будет возвращает все порты, включенные для SQL Server. язык SQL Server 2005 и SQL Браузер сервера поддерживает ipv6 и ipv4.
Когда клиенты SQL Server 2000 и SQL Server 2005 запрашивают SQL Server ресурсы, клиентская сетевая библиотека отправляет UDP-сообщение в сервер использует порт 1434. Браузер SQL Server отвечает с помощью TCP / IP порт или именованный канал запрашиваемого экземпляра. Сетевая библиотека на затем клиентское приложение завершает соединение, отправив запрос к серверу с использованием порта или именованного канала желаемого пример.
Использование брандмауэра
Для связи со службой браузера SQL Server на сервере за брандмауэром откройте UDP-порт 1434 в дополнение к TCP-порту, используемому SQL Server (например, 1433).
Не уверен, что это тот ответ, который вы искали, но он сработал для меня. Покрутив колесики в Брандмауэре Windows, я вернулся в Диспетчер конфигурации SQL Server, проверил сетевую конфигурацию SQL Server, в протоколах для экземпляра, с которым я работал, взглянул на TCP/IP. По умолчанию, похоже, мой был установлен в disabled, что позволяло, например, подключаться к локальной машине, но не использовать SSMS на другой машине. Включение TCP / IP сделало трюк для мне.
Я наконец нашел проблему здесь. Несмотря на то, что брандмауэр был выключен в обоих местах, мы обнаружили, что маршрутизатор в центре обработки данных SQLB активно блокирует UDP 1434. Я смог определить это, установив инструмент PorQry от Microsoft (http://www.microsoft.com/en-ca/download/details.aspx?id=17148 ) и выполнение запроса к порту UDP. Затем я установил WireShark (http://www.wireshark.org/) для просмотра фактических деталей подключения и поиска маршрутизатора речь идет об отказе в передаче запроса. Поскольку этот маршрутизатор повлиял только на SQLB, это объясняет, почему все остальные соединения работали нормально.
Спасибо всем за ваши предложения и помощь!
Вы много пробовали. И я сочувствую тебе. Вот вам идея. Я вроде как следил за всеми твоими попытками. Мысленная нота у меня в голове звучит так:: "Когда Sql Server не подключается, когда вы все перепробовали, проводите свои правила брандмауэра с помощью программы, а не порта"
Я знаю, вы сказали, что отключили брандмауэр. Но что-то подсказывает мне все равно попробовать.Я думаю, что вы должны открыть брандмауэр "по программе", а не по порт.
Http://technet.microsoft.com/en-us/library/cc646023.aspx
To add a program exception to the firewall using the Windows Firewall item in Control Panel. On the Exceptions tab of the Windows Firewall item in Control Panel, click Add a program. Browse to the location of the instance of SQL Server that you want to allow through the firewall, for example C:\Program Files\Microsoft SQL Server\MSSQL11.<instance_name>\MSSQL\Binn, select sqlservr.exe, and then click Open. Click OK.Правка..........
Http://msdn.microsoft.com/en-us/library/ms190479.aspx
Я немного запутался, какую "программу" вы пытаетесь использовать на SQLB?
Это SSMS на SQLB? Или клиентская программа на SQLB ?
Правка...........
Не знаю, поможет ли это. Но я использую это для пинга "портов"... и что-то, что находится за пределами SSMS мир.
Http://www.microsoft.com/en-us/download/details.aspx?id=24009
Есть ли у вас какие-либо клиентские псевдонимы, определенные на вашей машине разработки? Если это так, то определите их так же и на SQLB. В частности, я подозреваю, что у вас есть клиентские псевдонимы в формате InstanceName, которые определяют порты, таким образом, обходя фактические имена экземпляров и необходимость в браузере SQL (частично). Есть и другие возможности с клиентскими псевдонимами, так что просто убедитесь, что они одинаковы.
Чтобы проверить наличие псевдонимов клиента SQL, используйте конфигурацию SQL Server Диспетчер, (в microsoft SQLServer, меню Пуск Программы). Там, конфигурация клиента goto, а затем "псевдонимы".
Другие вещи для проверки:
Что SQLA и SQLB находятся либо в одном домене, либо между ними нет проблем с доверием.
Убедитесь, что в SQLB включен TCP/IP в качестве клиентского протокола (это также доступно в Диспетчере конфигурации SQL).
По некоторым вашим ответам я думаю, что вы, возможно, пропустили суть моих высказываний о доменах и трастах. Вы не можете подключиться к SQL " Server\Instance ", если между клиентом и сервером нет достаточного доверия. Это связано с тем, что вся схема именования экземпляров, используемая SQL Sevrer, зависит от имен участников службы (Service Principal Names) для обнаружения, определения местоположения и авторизации, а имена участников службы хранятся в AD. Таким образом, если клиент не находится в том же поле, экземпляр должен иметь возможность зарегистрировать свой SPN, а клиент должен иметь возможность просмотрите любой лес объявлений, в котором зарегистрирован экземпляр сервера, в который он входит.
Если вы не можете этого сделать, то имена экземпляров фактически не работают, и вы должны использовать номер порта (или имя канала) вместо этого. Вот что, как я теперь подозреваю, происходит.
- мне пришлось указать порт в диспетчере конфигурации SQL > TCP / IP
- Откройте порт брандмауэра
- затем подключитесь удаленно, используя: "имя сервера\другой экземпляр базы данных, (номер порта)"
- соединено!
Ну после того, как я потратил около 10 дней, пытаясь решить эту проблему, я, наконец, понял это сегодня и решил опубликовать решение
В меню Пуск введите команду Выполнить, откройте его в поле Выполнить введите службы.MSC, нажмите OK
Убедитесь, что запущены эти две службы SQL Server (MSSQLSERVER) SQL Server VSS writer
Мне нужно сделать 2 вещи, чтобы соединиться с именем экземпляра
1. Enable SQL Server Browser (in SQL server config manager) 2. Enable UDP, port 1434 trong file wall (if you using amazon EC2 or other service you need open port in their setting too)Перезапустить sql и готово
Чтобы решить эту проблему, необходимо убедиться, что на машине, на которой размещен SQL Server, выполняется следующее...
- убедитесь, что служба браузера сервера запущена
- убедитесь, что связь TCP/IP включена для каждого экземпляра, с которым вы хотите связаться по сети.
![]()
- при запуске нескольких экземпляров убедитесь, что каждый экземпляр использует другой порт и что порт не используется. например, для двух экземпляров 1433 (порт по умолчанию для экземпляра по умолчанию, 1435 для именованного экземпляра.
![]()
- убедитесь, что брандмауэр имеет запись, разрешающую связь с браузером SQL Server на порту 1434 по протоколуUDP .
- убедитесь, что брандмауэр имеет запись, разрешающую связь с экземплярами SQL Server на портах, назначенных им в шаге 3 по протоколу TCP
![]()



Comments