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