2011-12-14 6 views
23

Я пытаюсь подключиться к базе данных SQL Server 2005 с моего Mac с помощью unixODBC и FreeTDS, как я изложил here. Однако, когда я пытаюсь подключиться в к другой БД, используя ту же установку, я получаю:Ошибка «Adaptive Server is unavailable or does not exist» с SQL Server от PHP

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

+0

Я нашел следующие 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 ' – shorif2000

+1

Я не могу найти' libtdsodbc.so' где-нибудь команду usinf 'find'. Я использую centos 5 – shorif2000

ответ

9

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

Попробуйте обход DSN первого и подключиться с помощью:

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

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

+1

'TDSVER = 8.0 tsql -S * serverIPAddress * -U * имя пользователя * -P * пароль *' это работает для меня, но в freetds не имеет значения – shorif2000

4

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

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

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

+1

http://freetds.schemamania.org/userguide/ freetdsconf.htm больше не работает – Jan

4

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

24

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

Спасибо за это, мне нужно было указать порт ('ip: port' для pymssql), и команда LH позволила мне легко найти его. – Adversus

+0

Если tsql -LH не дает результата, каков следующий шаг, который следует предпринять? – brad

+0

Неверно ли 'SERVER_IP_ADDRESS'? Попробуйте выполнить ping для этого IP-адреса –

-5

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

setsebool -P httpd_can_network_connect_db 1 
setsebool -P httpd_can_network_connect 1 

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

6

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

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 (тест это название раздела из odbc.ini; -v означает многословен):

isql -v test username password -v 

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