我在一个Red Hat Linux 6服务器上运行R 2.15.2。我的目标是通过RODBC连接到另一台机器上的MS SQL Server数据库。我进行了研究,并从Microsoft支持网站下载并安装了Linux版本的MS SQL ODBC驱动程序。由于它是Windows驱动程序所需的,而且尚未在RHL仓库中(仓库版本为2.2.14),因此我必须从源代码构建unixODBC版本2.3.0。
经过一番努力,我终于成功安装和配置了驱动程序,并可以通过isql
命令成功连接到SQL Server数据库。
$ isql -v test testuser testpass
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
我知道我的odbc.ini
和odbcinst.ini
文件已经正确设置。
然而,当我尝试从R中访问ODBC连接时,会发生以下情况:
> test <- odbcDriverConnect('DSN=test;Database=RSQLTest01;Uid=testuser;Pwd=testpass')
Warning messages:
1: In odbcDriverConnect("DSN=test;Database=RSQLTest01;Uid=testuser;Pwd=testpass") :
[RODBC] ERROR: state IM002, code 0, message [unixODBC][Driver Manager]Data
source name not found, and no default driver specified
2: In odbcDriverConnect("DSN=test;Database=RSQLTest01;Uid=testuser;Pwd=testpass") :
ODBC connection failed
这是在R中执行odbcDataSources
命令的结果:
> odbcDataSources()
named character(0)
我做了一些研究,认为解决方案(虽然我可能错了)可能与正确配置ODBC环境变量有关,以便RODBC知道去哪里找odbc.ini
。根据我的研究,我找到了以下可能相关的环境变量:$ODBCINI,$ODBCSYSINI,$ODBC_ROOT $ODBC_INCLUDE和$ODBC_LIBS。
我有一个合理的想法应该设置这些内容,但我不确定如何永久性地设置它们,以便RODBC可以识别出适当的文件所在位置。
有人能为我解释一下吗?我不确定我是否正确理解了环境变量在Linux中的工作方式,特别是为什么isql
可以毫无问题地连接,但RODBC
甚至找不到驱动程序/数据源。
注意:当我安装了repo版本的unixODBC时,使用R中的install.packages('RODBC')
命令可以很好地安装RODBC。但是,在我从源代码安装了unixODBC 2.3.0之后,由于依赖性问题,RODBC安装将失败,并且我必须使用此处发布的指南从源代码安装RODBC。我是否可能最初未正确配置ODBC,这就是为什么现在遇到困难的原因?