在Mac上从R连接到Oracle

时间:2014-09-18 15:08:36

标签: r oracle rodbc

我一直在尝试从R建立与Oracle数据库的连接。在Windows和Linux上运行良好,但似乎无法在Mac上运行它。这是另一篇文章,我按照说明没有运气。我更喜欢使用RODBC软件包,但是使用ROracle是可以的(我无法工作)。我尝试了Oracle Instant ClientActual Technologies驱动程序。任何帮助将不胜感激。

Installing ROracle on Mac OS X - what is needed from Oracle?

使用Active Technologies驱动程序,我已经设置并成功测试了ODBC管理器的连接,但odbcDataSources()没有返回我定义的任何连接。

由于编译错误,ROracle无法安装:

ld: library not found for -lclntsh
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [ROracle.so] Error 1
ERROR: compilation failed for package ‘ROracle’
* removing ‘/Library/Frameworks/R.framework/Versions/3.1/Resources/library/ROracle’

似乎当解压缩时,即时客户端不会将文件放在正确的目录中。以下是我组织文件的方式:

bin/adrci
bin/genezi
bin/sqlplus
bin/uidrvci
lib/libclntsh.dylib.11.1
lib/libnnz11.dylib
lib/libocci.dylib.11.1
lib/libociei.dylib
lib/libocijdbc11.dylib
lib/sqlplus.dylib
lib/sqlplusic.dylib
lib/odbc5.jar
lib/odbc6.jar
lib/xstream.jar
sdk/ - All the files from that ZIP file

我还必须创建一个rdbms / public目录。我把所有头文件(.h)放在了这个过程中让我更进一步。

3 个答案:

答案 0 :(得分:0)

也许iODBC可以完成这项工作,您可以查看this,尤其是文档的Install部分。 This page也可以帮助您设置iODBC。

如果此方法不起作用,您也可以尝试使用rstudio

答案 1 :(得分:0)

自从我在Mac上工作了一段时间......

教育猜测用ROracle解决你的编译问题:

执行export LD_LIBRARY_PATH=<instantclientlocation>/lib

这有帮助吗?

答案 2 :(得分:0)

我可以用ROracle帮助你。以下是使其有效的步骤:

  1. 安装Oracle Instant Client(并重启以防万一)
  2. 获取数据库的Oracle R Distribution(http://www.oracle.com/technetwork/database/database-technologies/r/r-distribution/downloads/index.html)并记下分发版本。在我的例子中,我使用最新的,目前是1.5.1
  3. 一些注意事项:

    R几乎是一款便携式应用。如果您将它与Rstudio一起使用,您可以轻松地从OracleR和另一个R的分布之间切换RStudio设置。

    如果您的环境变量中碰巧有多个发行版,请确保在继续之前使用Oracle R。

    1. 从此处下载并安装适用于您的Oracle R版本(我们之前提到过)的CLIENT和SUPPORTING ROracle软件包:http://www.oracle.com/technetwork/database/database-technologies/r/r-enterprise/downloads/index.html
    2. 版本有一些细节,所以这是我工作安装的代码:

      install.packages(".\\packages\\client\\ORE_1.5.1.zip",repos=NULL)
      install.packages(".\\packages\\client\\OREbase_1.5.1.zip",repos=NULL)
      install.packages(".\\packages\\client\\OREcommon_1.5.1.zip",repos=NULL)
      install.packages(".\\packages\\client\\OREdm_1.5.1.zip",repos=NULL)
      install.packages(".\\packages\\client\\OREeda_1.5.1.zip",repos=NULL)
      install.packages(".\\packages\\client\\OREembed_1.5.1.zip",repos=NULL)
      install.packages(".\\packages\\client\\OREgraphics_1.5.1.zip",repos=NULL)
      install.packages(".\\packages\\client\\OREmodels_1.5.1.zip",repos=NULL)
      install.packages(".\\packages\\client\\OREpredict_1.5.1.zip",repos=NULL)
      install.packages(".\\packages\\client\\OREstats_1.5.1.zip",repos=NULL)
      install.packages(".\\packages\\client\\ORExml_1.5.1.zip",repos=NULL)
      
      install.packages(".\\packages\\supporting\\arules_1.5-0.zip",repos=NULL)
      install.packages(".\\packages\\supporting\\Cairo_1.5-9.zip",repos=NULL)
      install.packages(".\\packages\\supporting\\DBI_0.6-1.zip",repos=NULL)
      install.packages(".\\packages\\supporting\\png_0.1-7.zip",repos=NULL)
      install.packages(".\\packages\\supporting\\randomForest_4.6-12.zip",repos=NULL)
      install.packages(".\\packages\\supporting\\ROracle_1.3-1.zip",repos=NULL)
      install.packages(".\\packages\\supporting\\statmod_1.4.29.zip",repos=NULL)
      
      require(DBI)
      require(OREdm)
      require(ORE)
      require(ROracle)
      ore.connect(user = "...", sid = "...", host = "...", password = "...")
      ore.is.connected() #to test the connection
      

      4。此时,您应该能够从服务器接收响应。如果你无法连接,有两件事要做:

      1. 确定服务器是否识别出连接(如果没有,那么我认为您应该使用SERVER Oracle R文件设置服务器。但是,我还没有这样做,也不能说怎么做。){{ 3}}
      2. 确定服务器是否识别并拒绝连接(然后您应该检查ore.connect()参数