Подключение к именованному экземпляру SQL Server из Windows 64bit
У меня есть приложения Java и.net, работающие на сервере приложений с использованием Microsoft Windows Server 2003, Enterprise Edition. Они переносятся на другой 64-разрядный компьютер Windows Server приложений.
Все приложения подключаются к одной и той же базе данных SQL Server 2005 в именованном экземпляре.
До сих пор я пытался переместить приложения в точности так, как они есть, без изменений в файлах конфигурации, из старого блока в новый.
На новом сервере приложений ни приложения java, ни приложения.net не подключаются к базе данных (именованный экземпляр).
Сообщение об ошибке JDBC: "Не удалось подключиться к указанному экземпляру. Ошибка: java.net.SocketTimeoutException: истекло время ожидания".
Сообщение об ошибке.net: "При установлении соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не найден или недоступен".
Если я изменю конфигурацию БД на тот, который не находится на именованном экземпляре, он будет работать на новом сервере приложений.
База данных настроена правильно, потому что мы смогли подключиться к старому серверу приложений. Я могу пропинговать сервер базы данных с нового сервера приложений.
Есть ли причина, по которой это не будет работать на новом сервере приложений?
Строка подключения java: "jdbc:microsoft:sqlserver://[dbservername];SelectMethod=Cursor;instanceName=[dbinstance]"
Строка подключения.net: "Сервер = [имя_бд_сервера]\[dbinstance]; База данных =Risk_DB;Uid=[пользователь];Pwd=[pwd];"
ОБНОВЛЕНИЕ За предложения в ответах я получил номер порта экземпляра. Я также установил SQL Server Management Studio, чтобы я мог устранить свои приложения в качестве проблемных точек. В Management Studio, если я использую [имя_сервера][имя_экземпляра], я получаю сообщение "ошибка, связанная с сетью или экземпляром, при установлении соединения с SQL Server...", но она работает, когда я использую [имя_сервера],[ порт]. Не уверен, есть ли способ обойти это?
ОБНОВЛЕНИЕ № 2 Проблема обострилась до команды инфраструктуры / сервера / сети. Они отключили брандмауэр Windows на новом сервере приложений. Presto, теперь я могу подключиться к [dbservername]\[dbinstance] в Management Studio, и все приложения работают с использованием существующих файлов конфигурации.
2 ответа
Ваш именованный экземпляр будет работать на другом порту. Порт 1433 (по умолчанию для экземпляра по умолчанию), вероятно, открыт, а порт, на котором работает именованный экземпляр, вероятно, заблокирован. Вы можете проверить порт в журнале ошибок для именованного экземпляра (при условии, что вы можете подключиться локально, в обозревателе объектов, разверните сервер, разверните Управление, разверните Журналы SQL Server, щелкните правой кнопкой мыши текущий и выберите "Просмотр журнала SQL Server" IIRC.), он скажет что-то вроде этого при запуске:
Server is listening on [ 127.0.0.1 <ipv4> 3587 ].
Последний номер - это номер порта, который должен быть доступен с вашего удаленного компьютера и любых сетевых устройств и служб, через которые он должен пройти, чтобы попасть туда. Если вы не найдете такой строки, возможно, что TCP/IP не включен для именованного экземпляра. На этом сервере перейдите в Диспетчер конфигурации SQL Server, разверните Конфигурация сети SQL Server, нажмите "Протоколы для" и убедитесь, что на правой панели включен протокол TCP/IP. Если вам нужно включить это, вам нужно перезапустить SQL Server, чтобы он вступил в силу.
Если он уже включен (или после включения и перезапуска службы), вы сможете обновить это представление и проверить используемый порт, если щелкнуть правой кнопкой мыши TCP/IP, нажать "Свойства" и перейти к IP. Вкладка Адреса. Вы можете видеть порты в настоящее время для каждого IP. Здесь будет несколько разделов IPn и раздел IPAll. Для каждого IP-адреса вы можете изменить поле "Порт TCP" на порт, который вы хотите использовать (и удалить любые значения во всех полях "Динамические порты TCP" на 0). Нажмите Применить и перезапустите сервис. Это снова потребует перезапуска службы, но позволит вам указать определенный порт, чтобы вы могли добавить исключение в брандмауэр (или использовать тот, который уже существует, предполагая, что этот сервер еще не использует этот порт).
Возможные проблемы:
- Брандмауэр может блокировать соединения.
- Имя экземпляра не совпадает с указанным в строке подключения.
- Строка подключения указывает на другой порт или SQL Server работает на другом порту, а не по умолчанию 1433