Не удалось подключиться к SQl Server из Linux

Я пытаюсь подключиться к SQL Server 2008 на CentOS 5.8. Я использую unixODBC 2.3.0 и драйвер ODBC для SQL Server (www.microsoft.com/en-us/download/details.aspx?id=28160).

Когда я пытаюсь проверить соединение, запустив:

isql -v mydsn username password

это дает мне

[S1T00][unixODBC][Microsoft][SQL Server Native Client 11.0]Login timeout expired
[08001][unixODBC][Microsoft][SQL Server Native Client 11.0]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
[08001][unixODBC][Microsoft][SQL Server Native Client 11.0]TCP Provider: Error code 0x2726
[ISQL]ERROR: Could not SQLConnect

Порт открыт, сервер доступен.

Я пытался диагностировать проблему дальше, но застрял здесь:

 strace -e trace=network isql -v mydsn username password
socket(PF_FILE, SOCK_STREAM, 0)         = 3
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory)
socket(PF_FILE, SOCK_STREAM, 0)         = 3
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory)
socket(PF_FILE, SOCK_STREAM, 0)         = 3
connect(3, {sa_family=AF_FILE, path="/var/run/setrans/.setrans-unix"...}, 110) = 0
sendmsg(3, {msg_name(0)=NULL, msg_iov(5)=[{"\1\0\0\0", 4}, {"\1\0\0\0", 4}, {"\1\0\0\0", 4}, {"\0", 1}, {"\0", 1}], msg_controllen=0, msg_flags=0}, MSG_NOSIGNAL) = 14
socket(PF_FILE, SOCK_STREAM, 0)         = 4
connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory)
socket(PF_FILE, SOCK_STREAM, 0)         = 4
connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)
socket(PF_INET, 0x80001 /* SOCK_??? */, IPPROTO_TCP) = -1 EINVAL (Invalid argument)

Видимо, что-то не так происходит с установлением связи.

Может кто-нибудь мне помочь? Пожалуйста, дайте мне знать, если вам нужна другая информация.

Спасибо

4 ответа

Одна "ошибка" при работе с linux и odbc, подключающимися к Microsoft SQL Server при использовании драйвера Microsoft для linux, - это строка в odbc.ini, поскольку сервер также должен содержать порт.

 Server = [protocol:]server[,port]

согласно http://msdn.microsoft.com/en-us/library/hh568455.aspx Это соглашение отличается от большинства других установок, которые используют port = <portnumber> условность. Если это не настроено, вы увидите ошибку "Не удалось SQLConnect".

Также убедитесь, что используются правильные файлы odbc.

odbcinst -j

покажет настроенные источники и их местоположение.

Еще одна проблема, с которой вы можете столкнуться позже, - это драйвер для SQL Server, который игнорирует информацию о пользователе и пароле в odbc.ini, если она находится в виде обычного текста, поэтому убедитесь, что ваше приложение обрабатывает это.

Для устранения проблемы попробуйте выполнить следующие действия:

  1. телнет <1433>
  2. Перейти к настройке сети сервера SQL
  3. Настройки TCP/IP
  4. щелкните правой кнопкой мыши и откройте Свойства
  5. перейти на вкладку " Свойства сети "
  6. под IPAll свойства устанавливают динамические порты пустыми и порт 1433
  7. Перезапустите службу SQL

Проблема заключалась в том, что я использовал драйвер EL6 с EL5. После установки правильной версии все заработало. В любом случае спасибо за ответы каждого.

Вы можете открыть трассировку odbc и использовать tcpdump для перехвата сетевого пакета. Я думаю, что трассировка odbc поможет.

Другие вопросы по тегам