Подтвердить что ты не робот

"Адаптивный сервер недоступен или не существует" ошибка подключения к 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-адрес и порт. Любые мысли о том, что может быть проблемой, и если это на сервере заканчивается?

4b9b3361

Ответ 1

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 и слушает сконфигурированный порт.

Ответ 2

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

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

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

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

Ответ 3

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

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

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

Ответ 4

Ответ, потому что этот ответ появился сначала для поиска, когда у меня была такая же проблема: [08S01] [unixODBC] [FreeTDS] [SQL Server] Не удается подключиться: Adaptive Server недоступен или не существует

Именованные экземпляры MSSQL должны быть правильно настроены без установки порта. (http://freetds.schemamania.org/userguide/freetdsconf.htm говорит, что экземпляр экземпляра или порт NOT BOTH)

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

Ответ 5

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

Ответ 6

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

setsebool -P httpd_can_network_connect_db 1
setsebool -P httpd_can_network_connect 1

Лучше всего!