我正在开发一个连接到遗留数据库,Eloquence,通过ODBC,SQLR的应用程序。我使用UnixODBC设置我的服务器并设置驱动程序和数据源,如下所示:
/etc/odbcinst.ini:
[SQLR]
Description=SQLR for Elqouence
Driver=/opt/sqlr/lib/libsqlrodbc.so
Driver64=/opt/sqlr/lib64/libsqlrodbc64.so
FileUsage = 1
/etc/odbc.ini:
[reservations]
Description = SQLR datasource for RES database
Driver = SQLR
Database = res
Servername = eloq-dev
Port = 8003
UserName = sqlrodbc
我确认我可以通过运行isql reservations
连接到数据源,并运行了几个查询以确保。没有问题。然后我使用ODBC gem和以下代码将我的Ruby代码连接到数据库:
require 'rdbi-driver-odbc'
RDBI.connect :ODBC, db: "reservations"
其中输出以下错误:
Unable to connect to host.
Host 127.0.0.1, Service sqlrodbc
errno 111: Connection refused
ODBC::Error: 08001 (3047) [unixODBC][Marxmeier][SQL/R ODBC Client]connection failure
我担心它使用127.0.0.1作为主机,即使eloq-dev主机名在/ etc / hosts中设置为不同的地址。我还担心isql
有效,但ODBC gem没有。
修改
作为补充说明,当我使用tcpdump
命令时,与我的连接相关的唯一输出是:
$ tcpdump -i lo
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
18:38:39.688264 IP localhost.50447 > localhost.mcreport: Flags [S], seq 3355035364, win 43690, options [mss 65495,sackOK,TS val 1655798115 ecr 0,nop,wscale 7], length 0
18:38:39.688280 IP localhost.mcreport > localhost.50447: Flags [R.], seq 0, ack 3355035365, win 0, length 0
根本没有数据包通过网络传输。
我还改变了我的代码以使用RDBI而不是Ruby-ODBC,但也有同样的问题。
答案 0 :(得分:2)
我的问题最终是2倍。我通过VPN连接到Eloquence和SQL / R,这不如我想象的那么稳定,因此连接正在下降。另一个问题是SQL / R在odbc.ini文件中使用Server而不是ServerName和Service而不是Port。一旦我稳定了VPN并修复了odbc.ini文件,我就可以毫无问题地连接。