Adaptive Server недоступен или не существует ошибка при подключении к SQL Server из PHP

Я пытаюсь подключиться к базе данных SQL Server 2005 с моего Mac, используя unixODBC и FreeTDS, как я описал здесь. Однако, когда я пытаюсь подключиться к другой БД, используя ту же настройку, я получаю:

Connection Failed:[FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist.

Вот моя настройка freetds.conf:

[my_db]
host = 12.34.56.789
port = 1433
tds version = 8.0

А вот мой odbc.ini:

[my_dsn]
Driver = /opt/local/lib/libtdsodbc.so
Description = My Database
Trace = no
Servername = my_db
Database = MyDB

[ODBC Data Sources]
my_dsn = FreeTDS

Я все еще могу подключиться к другой БД, которую я установил на этом компьютере (описано в моем сообщении в блоге, указанном выше), поэтому я почти уверен, что ошибка не на стороне Mac. Я проверил на сервере, что использую правильный IP-адрес и порт. Любые мысли о том, что может быть проблемой, и если это на стороне сервера?


person wonder95    schedule 14.12.2011    source источник
comment
Я нашел следующие ini-файлы. какой бы я использовал? ./root/php/freetds-0.91/samples/odbc.ini ./usr/local/unixODBC/etc/odbc.ini ./usr/local/etc/odbc.ini ./usr/share/doc/freetds-devel-0.64/samples/odbc.ini ./etc/php.d/odbc.ini ./etc/odbc.ini ./var/tmp/php-5.2.6-2-root-root/etc/php.d/odbc.ini   -  person shorif2000    schedule 13.03.2013
comment
Я нигде не могу найти libtdsodbc.so с помощью команды find. Я использую центос 5   -  person shorif2000    schedule 13.03.2013


Ответы (9)


<сильный>1. См. информацию о сервере SQL

tsql -LH SERVER_IP_ADDRESS

locale is "C"
locale charset is "646"
ServerName TITAN
InstanceName MSSQLSERVER
IsClustered No
Version 8.00.194
tcp 1433
np \\TITAN\pipe\sql\query

<сильный>2. Установите свой файл freetds.conf

tsql -C    
freetds.conf directory: /usr/local/etc

[TITAN]
host = SERVER_IP_ADDRESS
port = 1433
tds version = 7.2

3 попытки

tsql -S TITAN -U user -P password

OR

 'dsn' => 'dblib:host=TITAN:1433;dbname=YOURDBNAME',

См. также http://www.freetds.org/userguide/confirminstall.htm (Пример 3- 5.)

Если вы получили сообщение 20009, помните, что вы не подключились к машине. Это проблема конфигурации или сети, а не сбоя протокола. Убедитесь, что сервер включен, имеет имя и IP-адрес, которые использует FreeTDS, и прослушивает настроенный порт.

person Evgeniy Tkachenko    schedule 07.10.2014
comment
Спасибо за это, мне нужно было указать порт (ip:port для pymssql) и команда LH позволила мне легко его найти. - person Adversus; 16.12.2015
comment
Если tsql -LH ничего не выводит, какой следующий шаг следует предпринять? - person brad; 28.12.2017
comment
Потрясающий. Спас мой день. - person Murwa; 08.03.2019
comment
@EvgeniyTkachenko: Иногда команда LH ничего не возвращает, хотя адрес правильный. Является ли LH устаревшим? - person Adrian Keister; 30.08.2019
comment
@ Адриан Кейстер Я использую FreeTDS (14 мая 2011 г.) (man tsql). Я не понял вашей проблемы. - person Evgeniy Tkachenko; 30.08.2019

После бесчисленных часов разочарования мне удалось заставить все работать:

odbcinst.ini:

[FreeTDS]
Description = FreeTDS Driver v0.91
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
fileusage=1
dontdlclose=1
UsageCount=1

odbc.ini:

[test]
Driver = FreeTDS
Description = My Test Server
Trace = No
#TraceFile = /tmp/sql.log
ServerName = mssql
#Port = 1433
instance = SQLEXPRESS
Database = usedbname
TDS_Version = 4.2

FreeTDS.conf:

[mssql]
host = hostnameOrIP
instance = SQLEXPRESS
#Port = 1433
tds version = 4.2

Первое тестовое подключение (mssql — это название раздела из freetds.conf):

tsql -S mssql -U username -P password

Вы должны увидеть некоторые настройки, но не ошибки, а только приглашение 1>. Используйте выход для выхода.

Затем давайте проверим DSN/FreeTDS (test — это имя раздела из odbc.ini; -v означает подробный):

isql -v test username password -v

Вы должны увидеть сообщение Connected!

person Jan    schedule 14.12.2016

Похоже, у вас проблема с источником данных dsn или odbc.

Попробуйте сначала обойти dsn и подключиться с помощью:

TDSVER=8.0 tsql -S *serverIPAddress* -U *username* -P *password*

Если это работает, вы знаете, что это проблема с вашим dsn или с freetds, использующими ваш dsn. Также возможно, что ваша версия tds несовместима с вашим сервером. Возможно, вы захотите попробовать другие настройки TDSVER (5.0, 7.0, 7.1).

person Jim Clouse    schedule 31.01.2012
comment
TDSVER=8.0 tsql -S *serverIPAddress* -U *username* -P *password* это работает для меня, но в freetds нет никакой разницы - person shorif2000; 13.03.2013
comment
Также возможно, что odbc установлен неправильно? Каковы правильные шаги, скажем, в Ubuntu? - person Adrian Keister; 30.08.2019

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

person Rob Forrest    schedule 30.07.2014

Отвечаю, потому что этот ответ появился первым для поиска, когда у меня была такая же проблема:

[08S01][unixODBC][FreeTDS][SQL Server]Невозможно подключиться: Adaptive Server недоступен или не существует

Именованные экземпляры MSSQL должны быть правильно настроены без указания порта. (документация по конфигурации freetds говорит, что установить экземпляр или порт НЕ ОБОИХ)

freetds.conf

[Name]
host = Server.com
instance = instance_name
#port = port is found automatically, don't define explicitly
tds version = 8.0
client charset = UTF-8

И в odbc.ini только потому, что вы можете установить порт, НЕ НАДО, когда вы используете именованный экземпляр.

person Naidim    schedule 16.10.2013
comment
@Jan: этот веб-сайт больше не доступен. - person Adrian Keister; 30.08.2019
comment
@Naidim: Например, каковы возможные значения? Кажется, этого нет в документации, и у меня странное чувство, что мой не SQL Express. - person Adrian Keister; 30.08.2019
comment
@AdrianKeister проверьте имя вашего экземпляра SQL Server, посмотрите эти ответы stackoverflow.com/questions/16088151/ - person Jan; 30.08.2019

Я обнаружил, что проблема связана с брандмауэром. Итак, убедитесь, что ваш IP-адрес внесен в белый список и брандмауэр не блокирует ваше соединение. Вы можете проверить подключение с помощью:

tsql -H somehost.com -p 1433

В моем случае вывод был:

Error 20009 (severity 9):
  Unable to connect: Adaptive Server is unavailable or does not exist
  OS error 111, "Connection refused"
There was a problem connecting to the server
person Developer    schedule 01.08.2018

Мне удалось решить ошибку адаптивного сервера, добавив имя хоста и его IP-адрес в новую строку в файле /etc/hosts на клиенте (на машинах Linux/Unix это расположение файла, для машин Windows ищите папку etc с хостами файл где-то ниже c:\windows\):

...
192.168.1.10    sqlserver10
...

Так что в этом случае разрешение имени отсутствовало.

Я знаю, что может быть много разных причин, которые приводят к этому сообщению об ошибке. Может быть, это кому-то поможет.

person mit    schedule 25.05.2021

Бад, отключите selinux или добавьте следующее на свой сервер RedHat/CentOS:

setsebool -P httpd_can_network_connect_db 1
setsebool -P httpd_can_network_connect 1

Лучший всегда!

person egmweb    schedule 09.10.2015

Попробуйте изменить имя сервера на «localhost».

pymssql.connect(server="localhost", user="myusername", password="mypwd", database="temp",port="1433")

person Geetesh    schedule 25.04.2019
comment
Если вы пытаетесь подключиться к базе данных на другом компьютере, этот ответ вообще не поможет. - person Adrian Keister; 30.08.2019