Ошибка «Adaptive Server недоступен или не существует» при подключении к SQL Server из PHP - PullRequest
34 голосов
/ 15 декабря 2011

Я пытаюсь подключиться к БД 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-адрес и порт. Любые мысли о том, в чем может быть проблема, и если это на стороне сервера?

Ответы [ 8 ]

34 голосов
/ 07 октября 2014

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

ИЛИ

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

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

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

11 голосов
/ 31 января 2012

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

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

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

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

8 голосов
/ 14 декабря 2016

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

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> .Используйте quit для выхода.

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

isql -v test username password -v

Вы должны увидеть сообщение Подключено!

7 голосов
/ 30 июля 2014

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

5 голосов
/ 16 октября 2013

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

[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 только потому, что вы можете установить Port, НЕ делать, когда вы используете именованный экземпляр.

2 голосов
/ 01 августа 2018

Я обнаружил, что проблема связана с брандмауэром. Поэтому убедитесь, что ваш 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
0 голосов
/ 25 апреля 2019

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

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

0 голосов
/ 09 октября 2015

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

setsebool -P httpd_can_network_connect_db 1
setsebool -P httpd_can_network_connect 1

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

...