У меня есть 4 разных именованных экземпляра SQL Server 2005 на одном сервере (в целях тестирования). На сервере нет экземпляра по умолчанию.
Поскольку в конечном итоге мне потребуется разрешить связь с этими экземплярами через брандмауэр, я установил порты каждого экземпляра, статически прослушивающие все IP-адреса сервера.
Редактировать: TCP / IP, общая память и именованные каналы включены. VIA отключен. Порты статически настроены для всех IP-адресов по протоколу TCP / IP, и каждый именованный экземпляр использует отдельный порт.
У меня также работает служба SQLBrowser, и все экземпляры настроены на разрешение удаленных подключений.
Один экземпляр настроен на порт по умолчанию (1433), и он работает нормально.
Однако другие экземпляры ведут себя очень странно. Когда я подключаюсь к ним с помощью Sql Server Management Studio в сети (так что я еще даже не перехожу через брандмауэр), студия подключается без жалоб. Однако, как только я пытаюсь расширить список базы данных для экземпляра, обновить экземпляр или что-то еще, я получаю следующую ошибку:
НАЗВАНИЕ: Microsoft SQL Server Management Studio
Не удалось получить данные для этого запроса. (Microsoft.SqlServer.SmoEnum)
Для получения справки щелкните: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&LinkId=20476
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
Не удалось подключиться к серверу. (Microsoft.SqlServer.ConnectionInfo)
Соединение с сервером было успешно установлено, но при входе в систему произошла ошибка. (поставщик: поставщик именованных каналов, ошибка: 0 - на другом конце канала нет процесса.) (Microsoft SQL Server, ошибка: 233)
Для получения справки щелкните: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&EvtSrc=MSSQLServer&EvtID=233&LinkId=20476





Попробуйте включить связь TCP / IP с экземплярами SQL-сервера. Если вы в конечном итоге собираетесь пройти через брандмауэр, вы, вероятно, в любом случае захотите использовать TCP / IP вместо именованных каналов.
Попробуйте использовать разные порты TCP / IP для каждого экземпляра на сервере. Вам нужно будет войти в диспетчер конфигурации SQL Server, чтобы изменить эти параметры. В TCP / IP вы можете изменить номера портов, а затем использовать их в строке подключения или в SQL Management Studio при подключении.
Из любопытства, зачем вам, например, сервер? Можете ли вы использовать один экземпляр и вместо этого иметь несколько баз данных? Если вы используете другие экземпляры для разработки или тестирования, возможно, вы захотите перенести их в другой ящик.
The first thing to do would be to try adding the prefix np: or tcp: (for either Named Pipes or TCP/IP) before the name of the server. For tcp/ip, you can also try adding the port number (,1433) after the name of the server. If this is not the default instance, you must add the name of the instance after the name of the server; for example:
> sqlcmd -S
> tcp:NameOfTheServer\sqlexpress,1433
Обновлено: удалена ссылка на источник, так как теперь это мертвая ссылка
Ответ Бофе сработал, так что это указывало на то, что с портами что-то не так.
Оказывается, в настройках TCP / IP для именованных экземпляров я прослушал все, установленный для протокола, а затем установил статический порт для IPAll, но динамический порт для IP1. Я предполагал, что, поскольку IP1 был отключен, мне не нужно было об этом беспокоиться, но, очевидно, если у вас установлен Listen All, то свойство enabled для IP1 игнорируется. Итак, наличие только одного IP-адреса на сервере и настройка динамических портов IP1 и статических портов IPAll вызвали какой-то странный конфликт.
Чтобы решить эту проблему, я просто установил IP1 на использование того же статического порта, что и IPAll, включил IP1, перезагрузил сервер, и все заработало так, как должно, без необходимости явно указывать порт в строке подключения.