“Adaptive Server不可用或不存在”错误从PHP连接到SQL Server

时间:2011-12-14 20:42:16

标签: php sql-server sql-server-2005 freetds unixodbc

我正在尝试使用unixODBC和FreeTDS从我的Mac连接到SQL Server 2005数据库,如我所概述的here。但是,当我尝试使用相同的设置连接到不同的数据库时,我得到:

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地址和端口。关于什么可能是问题的任何想法,以及它是否在服务器端?

9 个答案:

答案 0 :(得分:33)

<强> 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地址,并正在侦听已配置的端口。

答案 1 :(得分:11)

听起来您的dsn或odbc数据源存在问题。

首先尝试绕过dsn并使用以下方式连接:

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

如果可以,你知道你的dsn或使用你的dsn的freetds的问题。此外,您的tds版本可能与您的服务器不兼容。您可能想尝试其他TDSVER设置(5.0,7.0,7.1)。

答案 2 :(得分:8)

经过无数个小时的挫折,我成功地完成了所有工作:

<强> 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&gt; 提示。使用退出退出。

然后让我们测试DSN / FreeTDS( test 是来自 odbc.ini 的部分名称; -v表示详细信息):

isql -v test username password -v

您必须看到消息已连接!

答案 3 :(得分:7)

我遇到了同样的问题,我的问题是服务器上的防火墙没有从当前的IP地址打开。

答案 4 :(得分:5)

回应是因为当我遇到同样的问题时,这个答案首先出现在搜索中:

  

[08S01] [unixODBC] [FreeTDS] [SQL Server]无法连接:Adaptive Server不可用或不存在

必须正确配置MSSQL命名实例而不设置端口。 (documentation on the freetds config表示设置实例或端口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中只是因为你可以设置Port,所以当你使用命名实例时请不要这样做。

答案 5 :(得分:2)

我发现防火墙碰巧存在一个问题。因此,请确保您的IP已列入白名单,并且防火墙不会阻止您的连接。您可以使用以下方法检查连接性:

 ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), bibleBooks, newChapters);
                    bibleBooks.setAdapter(arrayAdapter);

在我的情况下,输出为:

tsql -H somehost.com -p 1433

答案 6 :(得分:1)

通过将主机名及其 IP 添加到客户端上文件 /etc/hosts 的新行中,我能够解决“自适应服务器”错误(在 linux/unix 机器上,这是文件位置,对于 Windows机器搜索位于 c:\windows\) 下方的带有主机文件的 etc 文件夹:

...
192.168.1.10    sqlserver10
...

因此在这种情况下缺少名称解析。

我知道导致此错误消息的原因可能有很多。也许这对某人有帮助。

答案 7 :(得分:0)

尝试将服务器名称更改为“ localhost”

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

答案 8 :(得分:-6)

Bud,禁用selinux或将以下内容添加到RedHat / CentOS服务器:

setsebool -P httpd_can_network_connect_db 1
setsebool -P httpd_can_network_connect 1

总是最好的!