我在 ubuntu 16.04 LTS 中通过 odbc 连接 mssql 数据库时遇到问题。我已经安装了 unix odbc 和 mussel 驱动程序。
mssql 驱动程序在 odbcinst.ini 中声明:
statadmin@dsc-stat:~$ cat /etc/odbcinst.ini [SQL Server 的 ODBC 驱动程序 13] 说明=SQL Server 的 Microsoft ODBC 驱动程序 13 驱动程序=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.1.0 UsageCount=1
我的 DSN 名为 DW16 位于 odbc.ini 中:
statadmin@dsc-stat:~$ cat /etc/odbc.ini [DW16] 驱动程序=SQL Server 的 ODBC 驱动程序 13 服务器名称=10.0.0.52 端口=1433
数据库上的直接连接(无需 DSN)有效:
statadmin@dsc-stat:~$ sqlcmd -S dsc-bdd1.dscptl.loc -U statsql 密码: 1> 从默认值中选择前 5 个 libdef 2> ; 3> GO
库定义
DEFAUT PONCTUEL SUREPAISSEUR PLIS CASSES TISSAGE FIL TIRANT FIL (受影响 5 行)
但是使用 DSN 时出现错误:
statadmin@dsc-stat:~$ sqlcmd -D -S DW16 -U statsql 密码: Sqlcmd:错误:SQL Server 的 Microsoft ODBC 驱动程序 13:登录超时已过期。 Sqlcmd:错误:SQL Server 的 Microsoft ODBC 驱动程序 13:TCP 提供程序:错误代码 0x2AFA。 Sqlcmd:错误:SQL Server 的 Microsoft ODBC 驱动程序 13:与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。 找不到服务器或无法访问服务器。 检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 有关更多信息,请参阅 SQL Server 联机丛书。
我猜想防火墙、tcp porter 身份验证问题不存在,因为直接连接有效。我尝试过使用 IP 地址以及服务器名称,但没有任何区别。
希望这里有人能有一个好主意来帮助我。
托马斯
答案1
终于得到了答案,我不知道我的同事在哪里找到答案,但是他发给我的是:
[MSSQLTest] 驱动程序 = SQL Server 的 ODBC 驱动程序 11 服务器 = [协议:]服务器[,端口]
笔记:
端口不是 ~/.odbc.ini 文件中的有效关键字
适用于 Linux 上的 Microsoft ODBC 驱动程序
您可以选择指定连接到服务器的协议和端口。
例如,服务器 = tcp:servername,12345。
要连接到静态端口上的命名实例,请使用 Server = servername,port_number。不支持连接到动态端口。
我的 odbc.ini 需要:
[DW16]
Driver=ODBC Driver 13 for SQL Server
Server=TCP:dsc-bdd1.dscptl.loc,1433
它也适用于 IP 地址。希望它能帮助其他人。
托马斯