我在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和端口。
如果我连接到只运行一个数据库的计算机,则服务器名称无关紧要。
这似乎不是正确的行为。
答案 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]名称来设置数据库名称。