[S1000][unixODBC][FreeTDS][SQL Server]无法连接到数据源

Posted

技术标签:

【中文标题】[S1000][unixODBC][FreeTDS][SQL Server]无法连接到数据源【英文标题】:[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source 【发布时间】:2018-04-23 14:32:46 【问题描述】:

我知道这个问题被问了很多次,我已经尝试了所有但没有任何效果。我正在尝试连接到与 Ubuntu 14.04 不同的服务器上的 MSSQL 数据库。

来自 /etc/odbcinst.in 的内容

 [ODBC]
 Trace = No
 TraceFile = /tmp/odbc.log

 [FreeTDS]
 Description = FreeTDS
 Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
 Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
 UsageCount = 1
 fileusage=1
 dontdlclose=1

来自 /etc/odbc.in 的内容

 [mssql]
 Driver = FreeTDS
 ServerName = mssql
 Port = 1433
 Database = My Database //database has space
 Driver=/usr/local/lib/libtdsodbc.so
 UsageCount = 1
 TDS_Version = 7.3
  instance = SQLEXPRESS

[Default]
Driver=/usr/local/lib/libtdsodbc.so

和 /etc/freetds/freetds.conf 中的 mssql 部分

[mssql]

 host = server ip
 port = 1433
  database = My Databas
 instance = SQLEXPRESS

  tds version = 7.3
  client charset = UTF-8

当我运行以下命令时,它会生成增加的数字

  tsql -S mssql -U username -P password

但是当我运行时

  isql -v mssql username password

经过近 30 个部分后,它返回

[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[08S01][unixODBC][FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist
[ISQL]ERROR: Could not SQLConnect

net.c:205:FAILED 连接到 54.214.30.231 端口 1433(TDS 版本 4.2)

当我使用 tsql -C 检查它时,错误显示安装在我的机器上的 TDS 版本 4.2,但我在 conf 文件中指定了 7.3。是这个原因吗?如果是这样,我该如何升级版本?如果不是原因,那么有人可以让我知道我做错了什么吗?

【问题讨论】:

您运行的是什么版本的 FreeTDS?我猜可能不支持7.3,试试7.2?但我不认为这是问题所在。通常,当您描述的数字增加时,这意味着它无法连接。您可以尝试使用 telnet 连接到您的 SQL Server 实例吗?使用您的服务器名称和端口尝试命令telnet sqlserver.domain.com 1433,看看它是否连接,或者只是挂起尝试连接。 @FlipperPA telnet 不起作用。它说,couldn't not open connection, connection failed 但我可以使用 SQL 数据库客户端使用相同的凭据创建连接。那么有什么问题呢? instance = SQLEXPRESS 对我来说听起来很奇怪,MSSQL 通常用于标准服务器安装,旨在为安装系统的机器之外的客户端提供服务,与默认情况下允许的 express 版本不同只能从同一台机器连接。您是否像这里描述的那样在您的 SQL 上启用了远程 tcp 连接? support.webecs.com/kb/a868/… 如果 telnet 失败,您需要先解决该问题。 【参考方案1】:

我认为您的 odbc 配置文件中缺少一个字母 i。它应该代替 odbc.in 一个 odbc.ini

来自isqlman 页面:

isql、iusql — unixODBC 命令行交互式 SQL 工具概要

isql DSN [用户 [密码]] [选项] 说明

isql 是一个命令行工具,它允许用户在 批处理或交互。它有一些有趣的选项,例如 生成包装在 html 表中的输出的选项。

iusql 是具有内置 Unicode 支持的同一工具。参数

DSN

数据源名称,用于连接数据库。在 /etc/odbc.ini 中查找数据源,并且 $HOME/.odbc.ini 文件,后者覆盖 前任的。

USER 指定应在其下建立连接的数据库用户/角色。

指定用户的PASSWORD 密码。

/etc/odbcinst.in 也是如此。应该是 /etc/odbcinst.ini

编辑基于评论

就您而言,Adrian 我认为创建一个新问题会更好,因为此错误编号与 OP 不同。

错误信息: [IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified [ISQL]ERROR: Could not SQLConnect.

根据您的错误消息,您需要将Server=ip_address 选项添加到您的odbc.ini(我建议也添加描述)。不要忘记括号中的名称[mssql] 必须是ServerDSN!您确定在TDS_Version = 7.3 中指定了正确的 TDS 版本吗? Driver 指令在/etc/odbcinst.ini 中应该足够了。为什么有两个不同的驱动程序 - Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.soDriver=/usr/local/lib/libtdsodbc.so 是第二个唯一的符号链接?

现在配置看起来像这样(我必须猜测,因为我没有看到您的配置):

[mssql]
Description = "My MSSQL DB for data science"
Driver = FreeTDS
ServerName = mssql
Server = <ip_address>
Port = 1433
Database = My Database //database has space
UsageCount = 1
TDS_Version = 7.3
instance = <my_mssql_instance>

【讨论】:

@AdrianKeister - 这实际上是给你的答案,所以我不知道这是否真的回答了你的问题。 恐怕这不能解决我的问题,因为我的文件已经被正确命名了。 @AdrianKeister 你有 Express SQL Server 吗?如果是,是否配置为接受来自外部的连接? 我很确定这不是 Express,因为我在企业级别工作。我可以很好地从我的 Mac 和 Windows 机器连接到服务器。我还可以使用来自 Xubuntu 16.04 的 tsql 连接到 MS SQL Server 数据库。我只是无法让 isqlpyodbc(我的最终目标)在 Xubuntu 上工作。 @AdrianKeister 我还是不明白你的设置。你有服务器在同一台机器上还是远程?

以上是关于[S1000][unixODBC][FreeTDS][SQL Server]无法连接到数据源的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac 上与 UnixODBC 和 FreeTDS 建立 MS Access 连接

Python3.x: pyodbc+freetds+unixodbc连接sybase数据库(Linux系统)

如何使用 unixodbc 和 freetds 在 Mac 上安装 RODBC?

linux使用pyodbc和freetds连接sqlserver

freeTDS 不使用其配置

如何在LINUX下用PDO连接SQLSRVER 2008