“Adaptive Server不可用或不存在”错误从PHP连接到SQL Server
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“Adaptive Server不可用或不存在”错误从PHP连接到SQL Server相关的知识,希望对你有一定的参考价值。
我正在尝试使用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地址和端口。关于什么可能是问题的任何想法,以及它是否在服务器端?
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 \TITANpipesqlquery
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,请记住您尚未连接到本机。这是配置或网络问题,而不是协议故障。验证服务器已启动,具有FreeTDS正在使用的名称和IP地址,并正在侦听已配置的端口。
听起来你的dsn或odbc数据源有问题。
尝试首先绕过dsn并使用以下连接:
TDSVER=8.0 tsql -S *serverIPAddress* -U *username* -P *password*
如果可以,你知道你的dsn或使用你的dsn的freetds的问题。此外,您的tds版本可能与您的服务器不兼容。您可能想尝试其他TDSVER设置(5.0,7.0,7.1)。
经过无数个小时的挫折,我成功地完成了所有工作:
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
你必须看到消息已连接!
我有同样的问题,我的问题是服务器上的防火墙没有从当前的IP地址打开。
回应是因为当我遇到同样的问题时,这个答案首先出现在搜索中:
[08S01] [unixODBC] [FreeTDS] [SQL Server]无法连接:Adaptive Server不可用或不存在
必须在不设置端口的情况下正确配置MSSQL命名实例。 (documentation on the freetds config说设置实例或端口不是两个)
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,不要在使用命名实例时。
我发现防火墙出现了问题。因此,请确保您的IP已列入白名单,并且防火墙不会阻止您的连接。您可以检查连接:
tsql -H somehost.com -p 1433
就我而言,输出是:
Error 20009 (severity 9):
Unable to connect: Adaptive Server is unavailable or does not exist
OS error 111, "Connection refused"
There was a problem connecting to the server
尝试将服务器名称更改为“localhost”
pymssql.connect(server =“localhost”,user =“myusername”,password =“mypwd”,database =“temp”,port =“1433”)
Bud,禁用selinux或将以下内容添加到RedHat / CentOS服务器:
setsebool -P httpd_can_network_connect_db 1
setsebool -P httpd_can_network_connect 1
总是最棒的!
以上是关于“Adaptive Server不可用或不存在”错误从PHP连接到SQL Server的主要内容,如果未能解决你的问题,请参考以下文章
PHP/PDO 错误:SQLSTATE[HY000] 无法连接:Adaptive Server 不可用或不存在(严重性 9)