在 Ubuntu 上使用 isql 连接到 MS SQL 服务器数据库

Connect to MS SQL Server Database Using isql on Ubuntu

最终目标:使用 pyodbc.

将我的 Xubuntu 16.04 机器连接到远程 MS SQL Server 2017 数据库

中期目标:让 isql 工作; tsql 有效,但 isql 无效。

我尝试在我的 Mac 上镜像设置 - 请参阅 以了解有效的方法。不幸的是,没有快乐。我浏览了许多 SO 问题,例如: One, Two, and Three, 并尝试了他们的方法,none 其中有效。我确信 Linux 机器打开了正确的端口,因为 tsql 在我的 Xubuntu 16.04 机器上运行。不幸的是,我无法让 isql 工作。我得到了可怕的

[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[01000][unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed
[ISQL]ERROR: Could not SQLConnect

错误。同样不幸的是,我看到的许多文档似乎都过时且自相矛盾。例如:

  1. odbc.ini 文件中,它应该是 Server = stuff, 1433Server = stuffServerName = stuff 并带有单独的 port = 行,还是我应该使用 instance?选项太多,但没有足够的文档来解决这个问题。
  2. odbcinst.ini 文件中究竟应该包含什么?我在 /usr/lib/x86_64-linux-gnu/odbc 目录中没有 libtdsS.so 文件。我应该省略设置行吗?
  3. freetds.conf 文件中究竟应该包含什么?我应该使用实际的 IP 地址吗?
  4. 如果我想强制 FreeTDS 使用特定的协议版本,我该怎么做?更改 freetds.conf 似乎不会影响 tsql -C 的结果。还是我只需要注销并重新登录?
  5. 退后一步:是否有更好的方法来处理整个该死的事情?我对 pymssql 不感兴趣,因为它现在似乎是废弃软件,支持 pyodbc.
  6. 我注意到 tsql -LH stuff 命令没有输出。该命令是否已弃用?或者我怎样才能从任何命令获得正确的设置?
  7. 是否有最新、清晰的文档随处可用?还是任何地方的最新、清晰的安装和使用指南,以及针对更常见问题的故障排除步骤?

非常感谢您的宝贵时间!

[编辑] 以下是启用后跟踪日志的内容:

[ODBC][34479][1567549751.158470][__handles.c][460]
        Exit:[SQL_SUCCESS]
            Environment = 0x1913750
[ODBC][34479][1567549751.158517][SQLAllocHandle.c][377]
        Entry:
            Handle Type = 2
            Input Handle = 0x1913750
[ODBC][34479][1567549751.158532][SQLAllocHandle.c][493]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x1914060
[ODBC][34479][1567549751.158551][SQLConnect.c][3721]
        Entry:
            Connection = 0x1914060
            Server Name = [ROEFDN806Q][length = 10 (SQL_NTS)]
            User Name = [mfad\m210028][length = 12 (SQL_NTS)]
            Authentication = [********][length = 8 (SQL_NTS)]
[ODBC][34479][1567549751.158987][SQLConnect.c][3929]Error: IM002
[ODBC][34479][1567549751.159017][SQLError.c][424]
        Entry:
            Connection = 0x1914060
            SQLState = 0x7ffd099daf10
            Native = 0x7ffd099daf0c
            Message Text = 0x7ffd099daf20
            Buffer Length = 500
            Text Len Ptr = 0x7ffd099daf0a
[ODBC][34479][1567549751.159034][SQLError.c][474]
        Exit:[SQL_SUCCESS]
            SQLState = IM002
            Native = 0x7ffd099daf0c -> 0
            Message Text = [[unixODBC][Driver Manager]Data source name not found and no default driver specified]
[ODBC][34479][1567549751.159066][SQLError.c][424]
        Entry:
            Connection = 0x1914060
            SQLState = 0x7ffd099daf10
            Native = 0x7ffd099daf0c
            Message Text = 0x7ffd099daf20
            Buffer Length = 500
            Text Len Ptr = 0x7ffd099daf0a
[ODBC][34479][1567549751.159079][SQLError.c][474]
        Exit:[SQL_NO_DATA]
[ODBC][34479][1567549751.159089][SQLError.c][424]
        Entry:
            Environment = 0x1913750
            SQLState = 0x7ffd099daf10
            Native = 0x7ffd099daf0c
            Message Text = 0x7ffd099daf20
            Buffer Length = 500
            Text Len Ptr = 0x7ffd099daf0a
[ODBC][34479][1567549751.159099][SQLError.c][474]
        Exit:[SQL_NO_DATA]
[ODBC][34479][1567549751.159130][SQLFreeHandle.c][290]
        Entry:
            Handle Type = 2
            Input Handle = 0x1914060
[ODBC][34479][1567549751.159144][SQLFreeHandle.c][339]
        Exit:[SQL_SUCCESS]
[ODBC][34479][1567549751.159156][SQLFreeHandle.c][220]
        Entry:
            Handle Type = 1
            Input Handle = 0x1913750

这是我当前的 odbc.ini 文件:

[ROEFDN806Q]
Description = "EOAM_RA Server"
Driver = FreeTDS
ServerName = ROEFDN806Q
Server = 10.146.186.7
Port = 1433
Database = EOAM_RA
UsageCount = 1
TDS_Version = 7.3

这是我的 odbcinst.ini 文件:

[FreeTDS]
Description = "FreeTDS ODBC Driver"
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

[ODBC]
Trace = yes
TraceFile = /tmp/odbctrace.txt

Microsoft 的 "ODBC Driver 17 for SQL Server" 是连接到 SQL 服务器的首选驱动程序。但是,如果您需要将 Windows 凭据从 Linux 框传递到 SQL 服务器实例,那么您实际上需要使用 FreeTDS,至少现在是这样。

我们通过

获得所需的组件
sudo apt install tdsodbc unixodbc

然后我们使用sudo nano -w /etc/odbcinst.ini创建一个这样的条目:

[FreeTDS]
DESCRIPTION=FreeTDS ODBC driver
DRIVER=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

接下来我们使用 sudo nano -w /etc/odbc.ini 创建一个条目,如下所示:

[SQLServer01]
DRIVER=FreeTDS
SERVER=192.168.0.179
PORT=49242
DATABASE=myDb
TDS_Version=7.2

最后,我们可以通过 isql 连接(注意双反斜杠):

isql SQLServer01 mydomain\myusername mypassword