我正在使用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
感谢所有帮助!
答案 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}}错误40532
是Cannot open server "%.*ls" requested by the login. The login failed
。