在 Mac 上从 R 连接到 Oracle

Posted

技术标签:

【中文标题】在 Mac 上从 R 连接到 Oracle【英文标题】:Connecting to Oracle from R on a Mac 【发布时间】:2014-09-18 15:08:36 【问题描述】:

我一直在尝试从 R 设置到 Oracle 数据库的连接。在 Windows 和 Linux 上运行良好,但似乎无法在 Mac 上运行。这是另一篇文章,我没有运气就按照说明进行操作。我更喜欢使用 RODBC 包,但可以使用 ROracle(我无法工作)。我尝试了Oracle Instant Client 和Actual 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) 都放在了这个过程中。

【问题讨论】:

找出一条信息,odbcDataSources() 函数从/usr/local/etc/odbc.ini 文件中读取连接。 ODBC 管理器将此文件保存到/Library/ODBC/odbc.ini 复制允许我查看可用的数据源。连接似乎有效,执行查询需要一段时间,但没有返回任何行。数据框的结构是正确的。 我可能会提供帮助,因为我的 Mac(Mavericks)上同时运行了 RODBC 和 ROracle。你有任何进展吗?您使用的是哪个 OS X 版本? 我最终说出了我所拥有的智慧here。也许这会有所帮助。 您是否尝试过安装 MSODBC 驱动程序? /usr/bin/ruby -e "$(curl -fsSL raw.githubusercontent.com/Homebrew/install/master/install)" brew tap microsoft/mssql-release github.com/Microsoft/homebrew-mssql-release brew update brew install --no-sandbox msodbcsql mssql-tools 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

我已经有一段时间没有在 Mac 上工作了......

用 ROracle 解决您的编译问题的有根据的猜测:

export LD_LIBRARY_PATH=<instantclientlocation>/lib

这有帮助吗?

【讨论】:

【参考方案3】:

我可以帮助您使用 ROracle。以下是使其工作的步骤:

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

一些注意事项:

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

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

    从此处下载并安装适用于您的 Oracle R 版本(我们之前提到过)的 CLIENT 和 SUPPORTING ROracle 软件包:http://www.oracle.com/technetwork/database/database-technologies/r/r-enterprise/downloads/index.html

版本有一些细节,所以这里是我工作安装的代码:

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。此时您应该能够收到来自服务器的响应。如果无法连接,有两件事要做:

    确定服务器是否识别连接(如果没有,那么我想您应该使用 SERVER Oracle R 文件设置服务器。不过,我还没有这样做,也不能说如何去做。)@987654323 @ 确定服务器是否识别并拒绝连接(然后你应该检查你的ore.connect()参数

【讨论】:

以上是关于在 Mac 上从 R 连接到 Oracle的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Windows 上从 Python 连接到 MSSQL Server

在 Linux 上从 .NET Core 连接到 Informix

通过 R 连接到 AWS Redshift - Mac OSX

在 Ubuntu 上从 PHP 连接到 SQL Azure

在 Linux 上从 Python 连接到受保护的 WiFi

在 Linux 上从 PHP 连接到 MS Access 数据库