【发布时间】:2020-01-03 05:36:33
【问题描述】:
最终目标:使用 pyodbc 将我的 Xubuntu 16.04 机器连接到远程 MS SQL Server 2017 数据库。
中间目标:让isql工作; tsql 有效,但 isql 无效。
我尝试在我的 Mac 上镜像设置 - 请参阅 this question 了解有效的方法。不幸的是,没有快乐。我查看了许多 SO 问题,例如:
One、Two 和 Three,
并尝试了他们的方法,但都没有奏效。我确信 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
错误。同样不幸的是,我看到的许多文档似乎都非常过时且自相矛盾。例如:
- 在
odbc.ini文件中,应该是Server = stuff, 1433或Server = stuff或ServerName = stuff并带有单独的port =行,还是应该使用instance?有太多的选择,没有足够的文档来解决这个问题。 -
odbcinst.ini文件中究竟应该包含什么内容?我在/usr/lib/x86_64-linux-gnu/odbc目录中没有libtdsS.so文件。我应该省略设置行吗? -
freetds.conf文件中究竟应该包含什么内容?我应该使用实际的 IP 地址吗? - 如果我想强制 FreeTDS 使用特定的协议版本,我该怎么做?更改
freetds.conf似乎不会影响tsql -C的结果。还是我只需要退出并重新登录? - 退后一步:有没有更好的方法来处理整个该死的事情?我对
pymssql不感兴趣,因为此时它似乎是废弃软件,支持pyodbc。 - 我注意到
tsql -LH stuff命令不会产生任何输出。该命令是否已弃用?或者我怎样才能从任何命令中获得正确的设置? - 是否有最新的、清晰的文档随处可用?或者随时随地提供最新、清晰的安装和使用指南,以及针对更常见问题的故障排除步骤?
非常感谢您的宝贵时间!
[编辑] 以下是启用后跟踪日志的内容:
[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
【问题讨论】:
-
建议 #1:使用 Microsoft 的 ODBC Driver 17 for SQL Server 而不是 FreeTDS ODBC。
-
你见过来自 pyodbc Wiki 的 these instructions 吗?
-
哦,太好了!我会试试看,然后告诉你进展如何。
-
我尝试了这些说明,在我终于让每个步骤都执行且没有错误之后,从开始到结束,我仍然遇到连接错误。在这种情况下,我收到此错误:
[28000][unixODBC][Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'domain\username'. [ISQL]Error: Could not SQLConnect.其他想法?我知道我可以登录服务器,因为tsql仍然有效。 -
哦,所以您需要使用 Windows 凭据进行连接,是吗?
标签: ubuntu odbc pyodbc freetds unixodbc