[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
来自isql
man 页面:
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.so
和 Driver=/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 数据库。我只是无法让 isql
或 pyodbc
(我的最终目标)在 Xubuntu 上工作。
@AdrianKeister 我还是不明白你的设置。你有服务器在同一台机器上还是远程?以上是关于[S1000][unixODBC][FreeTDS][SQL Server]无法连接到数据源的主要内容,如果未能解决你的问题,请参考以下文章
在 Mac 上与 UnixODBC 和 FreeTDS 建立 MS Access 连接
Python3.x: pyodbc+freetds+unixodbc连接sybase数据库(Linux系统)
如何使用 unixodbc 和 freetds 在 Mac 上安装 RODBC?