Linux RODBC无法识别我的odbc设置
我正在Red Hat Linux 6服务器上运行R2.15.2。我的目标是通过RODBC连接到另一台机器上的MS SQL Server数据库。我做了研究,从下载并安装了linux版本的MS SQL ODBC驱动程序。我必须从源代码处构建unixODBC 2.3.0版,因为它是windows驱动程序所必需的,并且还不在RHL repo中(repo版本是2.2.14) 无论如何,经过一点工作,我终于安装并正确配置了驱动程序,我可以通过Linux RODBC无法识别我的odbc设置,linux,r,unixodbc,rodbc,Linux,R,Unixodbc,Rodbc,我正在Red Hat Linux 6服务器上运行R2.15.2。我的目标是通过RODBC连接到另一台机器上的MS SQL Server数据库。我做了研究,从下载并安装了linux版本的MS SQL ODBC驱动程序。我必须从源代码处构建unixODBC 2.3.0版,因为它是windows驱动程序所必需的,并且还不在RHL repo中(repo版本是2.2.14) 无论如何,经过一点工作,我终于安装并正确配置了驱动程序,我可以通过isql命令成功连接到SQL Server数据库: $ isql
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
我一直在做一些研究,我认为解决方案(尽管我可能错了)可能与正确配置ODBC环境变量有关,以便RODBC知道在哪里可以找到ODBC.ini
。根据我的研究,我发现了以下可能相关的环境变量:$ODBCINI、$ODBCSYSINI、$ODBC\u ROOT$ODBC\u INCLUDE和$ODBC\u LIBS。
我对这些变量应该设置为什么有一个合理的想法,但我不确定如何永久设置它们,以便RODBC能够识别在哪里找到合适的文件
有人能帮我解释一下吗?我不确定自己是否正确理解了环境变量在linux中的工作方式,尤其是为什么isql
在连接上没有问题,但是RODBC
甚至找不到驱动程序/数据源
注意:当我安装了unixODBC的repo版本时,使用R中的
install.packages('RODBC')
命令,RODBC安装会很好。但是,在我从源代码安装unixODBC 2.3.0之后,由于依赖性问题,RODBC安装会失败,我必须使用。有没有可能我一开始就没有正确配置ODBC,这就是我现在遇到麻烦的原因?哇,我以为我是唯一一个处理这类东西的人。我必须解决同样的问题,发现最好的解决方案是使用rjdbc。这更容易配置,因为linux或osx上的ODBC非常不稳定。RJDBC的性能非常好,因为它使用本机ms sql server jar来执行查询。下面是我们其中一个脚本的一个示例。您只需要从microsoft下载sqljdbc4.jar,然后将.package(“RJDBC”)安装到您的环境中。我意识到您正在尝试让ODBC工作,我确实让它在osx上工作,但由于时间关系,我放弃了
library(RJDBC);
drv <- JDBC('com.microsoft.sqlserver.jdbc.SQLServerDriver', '/usr/local/project/dataproviders/jdbc/sqljdbc4.jar', identifier.quote="'");
ch <- dbConnect(drv, 'jdbc:sqlserver://the.server.address.net;databaseName=DataWarehouse', 'USERNAME', 'PASSWORD');
allsupp_allprod_allproc <- dbGetQuery(ch, paste("SELECT [Date], Sum([Fail]) as Numerator, Sum([Pass] + [Fail]) as Denominator,'' as Annotation,'True' as 'Use for CL' FROM [PSU_YieldData] Group by [Date] Order by [Date]"));
库(RJDBC);
drv在Ubuntu服务器中,我这样设置
- 编辑~/.bash_配置文件
nano~/.bash\u配置文件
- 添加此行
导出ODBCINI=/usr/local/etc/odbc.ini
导出ODBCSYSINI=/usr/local/etc
然后RODBC将很好地工作。它找不到驱动程序,因为您没有指定它!我也不明白DSN的东西应该如何工作,但在类似的情况下,这对我来说是可行的:
ch <- odbcDriverConnect('driver={SQL Server};server=servername;database=databasename;uid=username;pwd=password;')
sqlQuery(ch,'sql script',stringsAsFactors = FALSE)
我只是搜索“mysql odbc连接字符串”,而不是任何特定于R的内容。在Mac OS 10.13.3上配置unixODBC后,我也遇到了这个问题。我尝试配置我的.Renviron为ODBCINI设置一个特定于R的环境变量,但RODBC仍然不会列出我的数据源名称(DSN)。此外,我无法让它找到ODBCinst.ini中指定的驱动程序,甚至无法获得使用RODBC::ODBCDriverConnect()的连接字符串,尽管我能够连接isql 我能够让JDBC连接正常工作,但我不想依赖JVM,我已经为RodbText编写了一个重要的数据库访问代码 最终起作用的只是:
remove.packages('RODBC')
install.packages('RODBC', type="source")
如果您在mac上从源代码安装RODBC,它会正确地读取odbc.ini文件和odbcinst.ini文件
感谢这篇文章对解锁钥匙的微妙评论:
即使在windows中,我也发现odbcDriverConnect语句很挑剔,以至于我从未让它工作过。相反,我使用odbcConnect('odbc\u dsn\u entry',uid='username')。我知道ubuntu有一个odbc管理器,它看起来很像windows的管理器,但是它并没有提供更多的帮助,尤其是在红帽方面。此外,我在odbc管理器中将DB设置为用户和系统dsn方面也取得了更大的成功。非常感谢!!JDBC比ODBC简单得多它还不适用于我,但上面的一行也不适用(
isql-v testtestuser testpass
。我正在尝试与FileMaker连接:ch@Bobby你应该试试RJDBC。你只需要下载并使用FileMaker JDBC驱动程序。
Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=myDataBase;User=myUsername;Password=myPassword;Option=3;
remove.packages('RODBC')
install.packages('RODBC', type="source")