为什么一个ODBC连接工作而第二个没有?

时间:2017-04-25 12:43:22

标签: freetds unixodbc

我在Ubuntu 14.04上使用ODBC和FreeTDS。我们现在有三台服务器可以同时运行数据库(一次只能运行一台)。

我尝试将第二台服务器添加到我的freetds.conf和odbc.ini文件中,但它永远不会连接,即使指定相同的IP地址进行测试也是如此。

ODBC.ini文件

[Default]
Driver=NewFreeTDS

[MKMSDef]
Driver=NewFreeTDS
serverName=MKMSDefault

[MKMSSecond]
Driver=NewFreeTDS
serverName=MKMSSecond

[VP]
Driver=NewFreeTDS
ServerName=VirtualPrinter

freetds.conf文件

[global]
        tds version = 4.2

        # Whether to write a TDSDUMP file for diagnostic purposes
        # (setting this to /tmp is insecure on a multi-user system)
        dump file = /tmp/freetds.log
        debug flags = 0xffff

        # Command and connection timeouts
        timeout = 10
        connect timeout = 10

        # If you get out-of-memory errors, it may mean that your client
        # is trying to allocate a huge buffer for a TEXT field.
        # Try setting 'text size' to a more reasonable limit
        text size = 64512

[MKMSSecond]
        host = 10.1.10.71
        database = MKMSDefault
        port = 2638

[MKMSDefault]
        host = 10.1.10.71
        database = MKMSDefault
        port = 2638

[VirtualPrinter]
        host = 10.1.10.22
        database = VP
        port = 2638

命令isql MKMSDef用户传递连接成功  命令isql MKMSSecond用户传递失败

我认为两者之间没有什么不同,导致这种情况。

  

编辑   经过一番进一步的测试它似乎没有读取所有信息以了解连接的内容。无论在odbc.ini中指定为“ServerName”的是什么,都必须是数据库名称。它还需要在freetds.conf中定义,但那里只需要IP和端口。

     

如果我连接到只运行一个数据库的计算机,则服务器名称无关紧要。

     

这似乎不是正确的行为。

2 个答案:

答案 0 :(得分:0)

正如您已经部分了解的那样,如果您保持命名的一致性,简单性和相同的顺序,则要容易得多。这是一个例子:

freetds.conf

[bob]
host = bob.myserver.com
port = 1433
tds version = 7.2

[fred]
host = fred.myserver.com
port = 1433
tds version = 7.2

[joe]
host = joe.myserver.com
port = 1433
tds version = 7.2

odbc.ini

[bob]
Driver = FreeTDS
Server =bob.myserver.com
Port = 1433
TDS_Version = 7.2

[fred]
Driver = FreeTDS
Server = fred.myserver.com
Port = 1433
TDS_Version = 7.2

[joe]
Driver = FreeTDS
Server = joe.myserver.com
Port = 1433
TDS_Version = 7.2

如果您已清理并且仍有问题,请提供isql -v的详细信息,以便我们查看正在生成的错误。

答案 1 :(得分:0)

对于此特定项目,问题是因为它是ASA数据库。

指定ASA database = MKMSDefault instead of just database = MKMSDefault解决了我的问题。在阅读文档时,我以某种方式错过了区别。

我知道这很老了,不久前我解决了这个问题,但认为它可以帮助其他人。

从FreeTDS.conf用户指南中:(http://www.freetds.org/userguide/freetdsconf.htm

  

ASA数据库-指定连接到ASA服务器时默认数据库的名称。 TDS 5.0登录数据包具有一个称为lservname的字段。对于大多数TDS服务器,lservname是用户定义的字符串,没有固有含义。但是,ASA服务器要求lservname包含有效的数据库名称,并将其设置为连接的默认数据库。 FreeTDS通常用[section]文本填充lservname。代替此条目,而独立于[section]名称来设置数据库名称。