FreeTDS TSQL无法使用freetds.conf

时间:2018-05-29 08:38:50

标签: tsql freetds

我正在使用HomeBrew的freetds版本1.00.91。当我绕过freetds.conf时,我可以成功连接,例如使用以下命令

tsql -H {my_hostname} -p {port_no} -U {username} -P {password}

然而,当我试图

tsql -S MYMSSERVER -U {username} -P {password}

失败并出现以下错误:

  来自MYSERVER的消息40532(严重性20,状态1):
  无法打开登录请求的服务器“MYSERVER”。登录失败。

     

错误20002(严重性9):
  Adaptive Server连接失败
  连接到服务器时出现问题

freetds.conf内容如下:

[MYSERVER]
        host = {my_hostname}
        port = {port_no}
        tds version = 7.3

我检查了tsql -C的输出并确认7.3也是-H -p命令使用的版本。

以下是freetds.log文件中有关此错误的一些相关信息:

15:49:43.391174 3380 (token.c:313):looking for login token, got  aa(ERROR)
15:49:43.391215 3380 (token.c:132):tds_process_default_tokens() marker is aa(ERROR)
15:49:43.391240 3380 (mem.c:653):tds_free_all_results()
15:49:43.391258 3380 (token.c:2384):tds_process_info() reading message 40532 from server
15:49:43.391308 3380 (token.c:2456):tds_process_info() calling client msg handler
15:49:43.391391 3380 (token.c:2473):tds_process_info() returning TDS_SUCCESS
15:49:43.391418 3380 (token.c:313):looking for login token, got  fd(DONE)
15:49:43.391442 3380 (token.c:132):tds_process_default_tokens() marker is fd(DONE)
15:49:43.391471 3380 (token.c:2082):tds_process_end: more_results = 0

感谢所有帮助!

2 个答案:

答案 0 :(得分:0)

我让它成功了,更具体地说,它最终以一种黑客的方式与unixODBC一起工作。

这是我的freetds.conf文件

[my_hostname]
        host = {my_hostname}
        port = {port_no}
        tds version = 7.3

以下是我的odbc.ini文件

[Foo]
Description         = Test to SQLServer
Driver              = FreeTDS
Servername          = {the_same_my_hostname_as_in_freetds.conf}
Database            = BingMigration

isql Foo {username} {password}然后就像一个魅力。

为什么会这样:

根据tsql man,如果在-S中找不到服务器名,则tsql会将freetds.conf值视为主机名。这就是为什么以上freetds.conf有效的原因。我需要使用my_hostname来命名freetds.conf部分,因为isql似乎需要一个与第一个参数中freetds.conf中的部分匹配的DSN。我尝试使用freetds.conf中没有相应部分的主机名时失败了。

答案 1 :(得分:0)

这里有点混乱。 tsql直接使用libTDS,所以freetds.conf虽然isql是一个ODBC程序,主要使用odbc.ini(在Windows上这是存储为注册表项)。 isql不需要节名,术语是DSN名称。 没有server_url,名称通常是主机名,如DNS名称。 可用于调试这些问题的环境是TDSDUMPCONFIG。 初始问题中的freetds.conf似乎是正确的,服务器返回aa消息(ERROR)的事实似乎表明存在TCP连接。 根据{{​​3}}错误40532Cannot open server "%.*ls" requested by the login. The login failed