2011-12-14 50 views
23

我試圖連接到使用unixODBC的和freetds的,因爲我已經列出here一個SQL Server從我的Mac 2005數據庫。然而,當我嘗試使用相同的設置連接到不同的數據庫,我得到:「自適應服務器不可用或不存在」連接到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 2013-03-13 12:27:25

+1

我無法在使用find命令的任何位置找到`libtdsodbc.so`。我正在使用centos 5 – shorif2000 2013-03-13 12:42:56

回答

9

這聽起來像你有你的DSN或ODBC數據源的問題。

先嚐試繞過DSN和使用連接:

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

如果這樣的作品,你知道它與您的DSN或使用DSN freetds的一個問題。另外,您的tds版本可能與您的服務器不兼容。您可能想嘗試其他TDSVER設置(5.0,7.0,7.1)。

+1

`TDSVER = 8.0 tsql -S * serverIPAddress * -U * username * -P * password *`這適用於我,但在freetds中沒有任何區別 – shorif2000 2013-03-13 12:43:49

4

響應,因爲這個答案上來第一個搜索時,我也有同樣的問題: [08S01] [unixODBC數據] [freetds的] [SQL服務器]無法連接:自適應服務器不可用或不存在

必須正確配置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 2017-07-13 07:51:11

4

我有同樣的問題,我的問題是服務器上的防火牆未打開當前的IP地址。

24

1.請參閱有關SQL Server

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,請記住您沒有連接到機器。這是一個配置或網絡問題,而不是協議失敗。驗證服務器是否已啓動,具有FreeTDS正在使用的名稱和IP地址,並且正在監聽已配置的端口。

-5

芽,禁用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 

你必須看到消息聯繫!

相關問題