首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FreeTDS连接问题

FreeTDS连接问题
EN

Stack Overflow用户
提问于 2011-09-28 23:45:14
回答 3查看 32K关注 0票数 14

我使用FreeTDS 0.91连接到远程MSSQL服务器,但到目前为止,所有尝试都没有取得任何成果。

在我的Unix上执行tsql命令时,我会得到以下错误:

代码语言:javascript
复制
  locale is "en_US.UTF-8"
  locale charset is "UTF-8"
  using default charset "UTF-8"
  Error 20004 (severity 9)
  Read from the server failed
  OS error 104, "Connection reset by peer"
  Error 20002 (severity 9)
  Adaptive Server connection failed
  There was a problem connecting to the server

freetds.log中包含以下内容:

代码语言:javascript
复制
16:05:49.144905 20207 (log.c:196):Starting log file for FreeTDS 0.91
  on 2011-09-28 16:05:49 with debug flags 0xffff.
  16:05:49.145281 20207 (iconv.c:330):tds_iconv_open(0x3d29320, UTF-8)
  16:05:49.145426 20207 (iconv.c:187):local name for ISO-8859-1 is ISO-8859-1
  16:05:49.145448 20207 (iconv.c:187):local name for UTF-8 is UTF-8
  16:05:49.145459 20207 (iconv.c:187):local name for UCS-2LE is UCS-2LE
  16:05:49.145469 20207 (iconv.c:187):local name for UCS-2BE is UCS-2BE
  16:05:49.145479 20207 (iconv.c:349):setting up conversions for client charset "UTF-8"
  16:05:49.145489 20207 (iconv.c:351):preparing iconv for "UTF-8" "UCS-2LE" conversion
  16:05:49.145508 20207 (iconv.c:391):preparing iconv for "ISO-8859-1" "UCS-2LE" conversion
  16:05:49.145533 20207 (iconv.c:394):tds_iconv_open: done
  16:05:49.145550 20207 (net.c:205):Connecting to 70.70.218.13 port 2600 (TDS version 7.0)
  16:05:49.145686 20207 (net.c:270):tds_open_socket: connect(2) returned "Operation now in progress"
  16:05:49.236008 20207 (net.c:310):tds_open_socket() succeeded
  16:05:49.236061 20207 (util.c:156):Changed query state from DEAD to IDLE
  16:05:49.236083 20207 (login.c:782):quietly sending TDS 7+ login packet
  16:05:49.236173 20207 (token.c:328):tds_process_login_tokens()
  16:05:49.857930 20207 (util.c:331):tdserror(0x3d29080, 0x3d29320, 20004, 104)
  16:05:49.858072 20207 (util.c:361):tdserror: client library returned TDS_INT_CANCEL(2)
  16:05:49.858090 20207 (util.c:384):tdserror: returning TDS_INT_CANCEL(2)
  16:05:49.858114 20207 (util.c:156):Changed query state from IDLE to DEAD
  16:05:49.858137 20207 (token.c:337):looking for login token, got  0()
  16:05:49.858155 20207 (token.c:122):tds_process_default_tokens() marker is 0()
  16:05:49.858168 20207 (token.c:125):leaving tds_process_default_tokens() connection dead
  16:05:49.858179 20207 (login.c:466):login packet accepted
  16:05:49.858189 20207 (util.c:331):tdserror(0x3d29080, 0x3d29320, 20002, 0)
  16:05:49.858209 20207 (util.c:361):tdserror: client library returned TDS_INT_CANCEL(2)
  16:05:49.858220 20207 (util.c:384):tdserror: returning TDS_INT_CANCEL(2)
  16:05:49.858232 20207 (mem.c:615):tds_free_all_results()

这看起来是否可能是server的一个问题,还是我安装或配置了FreeTDS错误?

太迷茫了。请帮帮忙。

当我通过telnet连接到服务器时,这是我得到的响应:

尝试70.70.218.13..。

连接到70.70.218.13。

转义字符是“^]”。

^^

外部主机已关闭连接。

这是否意味着到主机的telnet连接是成功的?

SQL数据库运行在windows服务器上。连接到Windows服务器(就像通过远程桌面连接)会是主机名和端口使用的正确类型吗?或者我必须在windows服务器上找到一个直接指向SQL服务器的主机名?

EN

回答 3

Stack Overflow用户

发布于 2013-01-18 06:37:17

可汗。

我只是遇到了同样的情况。我在家里增加了一个.freetds.conf,解决了这个问题,

代码语言:javascript
复制
[global]
    # TDS protocol version
    tds version = 7.0 

我知道这正是大多数FreeTDS连接问题的答案。

这个方法也是由@提供的。

票数 24
EN

Stack Overflow用户

发布于 2016-07-25 23:48:50

对于五年亡灵表示歉意,当tsql成功连接到开放端口时,似乎也会发生此错误,但侦听器是SQL Server以外的其他服务。FreeTDS似乎没有尝试在登录时检查它是否在与Server以外的服务对话,因此错误消息是神秘的。(在我的例子中,我使用了远程桌面的端口号。)

票数 2
EN

Stack Overflow用户

发布于 2017-11-06 20:24:05

如果不想创建.freetds.conf,只需设置TDSVER环境变量(例如,在TDSVER上连接到Server 2008,使用TDS版本7.3):

代码语言:javascript
复制
set TDSVER=7.3

(对于*nix使用export)。

有关更多环境变量,请参见http://www.freetds.org/userguide/envvar.htm

有关不同RDBMS的TDS版本,请参见http://www.freetds.org/userguide/choosingtdsprotocol.htm

您还可以为日志文件指定一个路径,该路径可以通过设置环境变量TDSDUMP来提供更多信息,这将有助于解决问题并显示查找配置文件的位置。例如:

代码语言:javascript
复制
set TDSDUMP=C:\temp\freetds.log

在我的例子中,设置TDSDUMP变量显示了日志中的一个错误:

代码语言:javascript
复制
iconv.c:346:setting up conversions for client charset "CP1252;LC_CTYPE=English_United States.1252;LC_MONETARY=C;LC_NUMERIC=C;LC_TIME=C"
iconv.c:348:preparing iconv for "CP1252;LC_CTYPE=English_United States.1252;LC_MONETARY=C;LC_NUMERIC=C;LC_TIME=C" <-> "UCS-2LE" conversion
iconv.c:423:tds_iconv_info_init: client charset name "-1" invalid

显然,States.1252;LC_MONETARY=C;LC_NUMERIC=C;LC_TIME=C“没有解析字符串"CP1252;LC_CTYPE=English_United CP1252;LC_CTYPE=English_United”中的字符集名称

我创建了一个具有以下内容的.freetds.conf文件:

代码语言:javascript
复制
[global]
    tds version = 7.3           # version 7.3 for MSSQL 2008
    client charset = UTF-8      # so that we can get unicode characters

并按照日志文件的建议将其保存到C:\Windows\System32\config\systemprofile\AppData\Roaming\,这为我解决了问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7590944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档