54

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

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

4

9 回答 9

45

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

或者

 'dsn' => 'dblib:host=TITAN:1433;dbname=YOURDBNAME',

另请参见http://www.freetds.org/userguide/confirminstall.htm (示例 3-5。)

如果您收到消息 20009,请记住您尚未连接到机器。这是配置或网络问题,而不是协议故障。验证服务器已启动,具有 FreeTDS 正在使用的名称和 IP 地址,并且正在侦听配置的端口。

于 2014-10-07T06:01:13.090 回答
14

经过无数小时的挫折后,我设法让所有工作:

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>提示。使用quit退出。

然后让我们测试 DSN/FreeTDS(testodbc.ini中的部分名称;-v 表示详细):

isql -v test username password -v

您必须看到消息已连接!

于 2016-12-14T01:01:06.233 回答
12

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

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

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

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

于 2012-01-31T16:28:56.840 回答
8

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

于 2014-07-30T12:06:53.313 回答
6

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

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

必须正确配置 MSSQL 命名实例而不设置端口。(关于 freetds 配置的文档说设置实例或端口不是两者)

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 中只是因为您可以设置端口,当您使用命名实例时不要这样做。

于 2013-10-16T16:06:03.490 回答
3

我发现防火墙发生了问题。因此,请确保您的 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
于 2018-08-01T09:54:38.347 回答
2

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

...
192.168.1.10    sqlserver10
...

所以在这种情况下,名称解析丢失了。

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

于 2021-05-25T19:50:19.763 回答
-6

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

setsebool -P httpd_can_network_connect_db 1
setsebool -P httpd_can_network_connect 1

永远最好!

于 2015-10-09T15:40:19.837 回答
-8

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

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

于 2019-04-25T10:02:57.207 回答