2012-02-28 3 views
6

Очень загадочная проблема: PНе удалось получить доступ к экземпляру SQL Server 2008 R2 удаленно

У меня есть сервер, настроенный со статическим IP-адресом. Я установил SQL Server 2008 R2 с дополнительным экземпляром (ITAPP). Теперь, когда я использую IP для доступа к SQL Server следующие вещи происходит:

Client Машина:

sqlcmd -S XXX.XXX.XXX.XXX -U sa -P mypass 

Connected Успешно ....

Но когда я использую:

sqlcmd -S XXX.XXX.XXX.XXX\ITAPP -U sa -P mypass 

HResult 0xFFFFFFFF, Level 16, State 1 SQL Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].

Sqlcmd: Error: Microsoft SQL Native Client : An error has occurred while establishing a connection to the server.

When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections..

Sqlcmd: Error: Microsoft SQL Native Client : Login timeout expired.

Даже на том же компьютере (где установлен SQL Server) с использованием SQL Server Management Studi о. Я отключил свой брандмауэр на обеих машинах, даже разрешил все протоколы для ITAPP (общая память, именованные каналы, TCP/IP), также установил Allow Remote connection в true.

Что-то еще, когда я использую 127.0.0.1\SQLITRAX для подключения на серверной машине, он соединяется сразу.

Пожалуйста, помогите мне из этого беспорядка :)

+1

Почему ваше сообщение об ошибке говорит SQL 2005, если вы используете 2008? – Simon

+0

sql server 2008 – Wasif

ответ

16

Может быть, это потому, что это именованный экземпляр на удаленный сервер.
Именованный экземпляр не использует стандартный Tcp-порт SQL Server 1433, только по умолчанию (без имени) используется порт 1433.
Любой другой экземпляр «named» просто прослушивает другой порт.
Итак, вы должны проверить конфигуратор SQL-Server, на котором прослушивается TCP-порт, а затем сообщить клиенту о подключении к этому порту.
Скажите, что ваш именованный экземпляр прослушивает порт 12345, то клиент должен соединиться с помощью следующей команды

sqlcmd -S XXX.XXX.XXX.XXX,12345 -U sa -P mypass 

при указании порта TCP, то вам не нужно имя экземпляра.
В моем понимании имя экземпляра - это способ для служб SQL Server найти TCP-порт, который прослушивает этот именованный экземпляр.
Но для этого, чтобы работать ваш клиент должен иметь возможность получить доступ к этим другим услугам, которые разрешают имя экземпляра SQL Server (может быть, это браузер Агента/SQL Server SQL Server, но я не уверен)

Обновление
Вот скриншот, показывающий, где установить порт TPC для экземпляра SQL Server с именем. How to check the TPC listening port of a SQL Server named instance

так, на каком TCP-порту указан ваш именованный экземпляр SQL Server?

+1

Я только что обновил ответ с помощью скриншота, вот где искать TCP-порт, который ваш сервер прослушивает на – Max

+0

Спасибо MAX за вашу помощь – Wasif

+0

Спасибо за подсказку о порте. В основном это почти решило мою проблему. Единственное, что мне нужно было сделать, это создать входящее правило для этого конкретного порта в мастере брандмауэра Windows и расширенной безопасности. – MacGyver

3

служба обозревателя SQL-сервера должна быть доступно, чтобы иметь возможность подключения к именованным экземплярам.

См this article для получения дополнительной информации о том, что она делает, и какие порты открыть в брандмауэре

Этот technet article предоставляет удобный скрипт, чтобы открыть все необходимые порты

+0

мы уже сделали это – Wasif

+0

также проверили антивирус? –