在R中连接Oracle数据库

原文地址:

http://blog.52sox.com/use-r-c...

实际上学习R语言,主要是为了研究时间序列,相比Python的pandas,R中的包要强悍很多。
而使用R连接Oracle数据库的需求,实际是1个同事打算使用R语言对数据库直接进行操作,而不需要每次都导出数据再进行操作。而实际上我们公司是使用Python进行数据分析的。
而在R中,要实现与Oracle数据库的操作,主要有3个包可以使用:

  • RODBC
  • RJDBC
  • ROracle

RODBC惹的祸

而最开始他选择的是RODBC,主要是因为在Windows下进行操作。结果卡在了如下的异常中:

1: In odbcDriverConnect("DSN=group;UID=fwy;PWD=fwy") :
  [RODBC] ERROR: state IM014, code 0, message [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
2: In odbcDriverConnect("DSN=group;UID=fwy;PWD=fwy") :
  ODBC connection failed

可以很明显的看到,是没有安装对应的ODBC驱动。于是从oracle的官方页面下载了如下2个文件:

  • instantclient-basic-windows.x64
  • instantclient-odbc-windows.x64

这里我在Windows7上使用的版本是11.2.0.3。将上述2个文件解压后合并在1个文件夹后,通过管理员身份运行文件夹下的odbc_install.exe文件即可安装。
之后通过控制面板->管理工具->数据源(ODBC)中的相关设置即可成功连接。结果在他的Windows10系统中上述操作无法设置成功。
其配置页面类似如下:

ODBC

ODBC设置成功后就可以通过如下的方式操作Oracle数据库了:

library("RODBC")
db <- odbcConnect(dsn="mesprd", uid="mesprd", pwd="wip24ux")
data <- sqlQuery(db, "SELECT SYSDATE from DUAL")

需要注意的是,在这里第1个参数dsn是我们设置ODBC时对应的名称,如果使用IP地址的方式是无法连接成功的,这是需要注意的。

还是ROracle比较靠谱

既然RODBC行不通,那么我们就来实践下RJDBC吧,结果把我搞晕了,实在太复杂了,超出了我头脑的容纳范围。没办法,只能再换种方式了,于是只能试下ROracle了。
我进行了如下的操作:

install.packages('ROracle')

如果直接安装会出现类似如下的页面:

ROracle

结果安装的过程中提醒我没有找到OCI的库。那么需要安装如下3个包:

  • instantclient-basic-windows.x64
  • instantclient-sqlplus-windows.x64
  • instantclient-sdk-windows.x64

在这里,我使用的版本还是上面的11.2.0.3。安装完成后,还需要设置OCI_LIB64环境变量,以便可以找到对应的文件。
需要注意的是,ROracle的安装在Linux上相对更为简单,在Windows上我们需要手动进行源码的安装。很不幸运的是,其版本1.3.1在Windows7系统上式无法编译通过的,最后选择了版本1.2则很顺利的通过了。其下载地址可以点击
下载完成后,我们在R的环境下运行:

setwd('下载包的目录')
install.packages('ROracle_1.2-1.zip',repos=NULL)
#install.packages('ROracle',type='source')

当然你也可以手动执行如下的操作:

R CMD INSTALL ROracle-1.2-1.zip

这样就完成了包的安装,最后通过类似如下的方式进行操作

library(ROracle)
drv <- dbDriver("Oracle")
con <- dbConnect(drv, "mesprd", "wip24ux")

最后关于这3个库的性能问题,可以参考。其执行速度关系为ROracle>RODBC>RJDBC。

参考文章:

https://docs.oracle.com/en/da...
https://cran.r-project.org/we...
https://stackoverflow.com/que...
https://stackoverflow.com/que...
https://stackoverflow.com/que...

曾经的自己
记录开发中的点点滴滴,共同交流技术。

是1个执着、低调的人

1.9k 声望
161 粉丝
0 条评论
推荐阅读
C-如何快速生成Python的C扩展.md
真的好久没有分享技术文章了,主要是因为自己写的文章太过于小众,没想到自己竟然会分享这样一篇文章。这么一篇浓缩了自己多年来项目开发的实战经验。 不得不说,Python是一门很不错的编程语言。有时候,为了项目代码...

我勒个去阅读 1.9k

封面图
花了几个月时间把 MySQL 重新巩固了一遍,梳理了一篇几万字 “超硬核” 的保姆式学习教程!(持续更新中~)
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

民工哥14阅读 2k

封面图
硬卷完了!MongoDB 打怪升级进阶成神之路( 2023 最新版 )!
前面我们学习:MySQL 打怪升级进阶成神之路、Redis 打怪升级进阶成神之路,然后我们还在继续 NoSQL 的卷王之路。从第一篇文章开始,我们逐步详细介绍了 MogoDB 基础概念、安装和最基本的CURD操作、索引和聚合、工...

民工哥7阅读 614

封面图
初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。

王中阳Go4阅读 1.7k评论 2

封面图
又一款内存数据库横空出世,比 Redis 更强,性能直接飙升一倍!杀疯了
KeyDB是Redis的高性能分支,专注于多线程,内存效率和高吞吐量。除了多线程之外,KeyDB还具有仅在Redis Enterprise中可用的功能,例如Active Replication,FLASH存储支持以及一些根本不可用的功能,例如直接备份...

民工哥4阅读 1.7k评论 2

封面图
MySQL百万数据深度分页优化思路分析
一般在项目开发中会有很多的统计数据需要进行上报分析,一般在分析过后会在后台展示出来给运营和产品进行分页查看,最常见的一种就是根据日期进行筛选。这种统计数据随着时间的推移数据量会慢慢的变大,达到百万...

一个程序员的成长7阅读 927

封面图
深入理解MySQL索引底层数据结构
在日常工作中,我们会遇见一些慢SQL,在分析这些慢SQL时,我们通常会看下SQL的执行计划,验证SQL执行过程中有没有走索引。通常我们会调整一些查询条件,增加必要的索引,SQL执行效率就会提升几个数量级。我们有没...

京东云开发者3阅读 592

封面图

是1个执着、低调的人

1.9k 声望
161 粉丝
宣传栏