最近做毕设要用R连接Oracle,查阅了一些资料,主要用到两种方式连接oracle数据库,并且我已经测试成功。下面分享下我的安装过程和遇到的问题。
我主要是参阅了(http://wenku.baidu.com/link?url=aexRXQ822IapdnQ2j3zaqfQj611d_XXihumaYx0qCOiEsGUkl0t7p5zrXSHuuQIntyKjuHH-c3IGNfkY8bav15oxph2QNcRmgJKAqYrWYGC)这篇文档,介绍的很详细。
相对于其它的连接方式,用ROracle连接的方式性能和稳定性都较好。(https://blogs.oracle.com/R/entry/r_to_oracle_database_connectivity)这篇博客给这些方法的性能做了详细比较,感兴趣的可以了解下。
方式一:用ROralce包连接
1.环境
win10 64位
oracle11g
R x64 3.3.1
oracle11g的安装过程可参考(http://www.server110.com/oracle/201310/2546.html)
2.测试数据库连接
参考文档(http://wenku.baidu.com/link?url=wVAIFQ9KPoh8w7-F8qHhtnnkjrU9_T7ld1ibA81-eaH8Nua-m296gTYY7twOVGBTSLpZ3eMCTG5LEJZjgn5NxJxr0KGCSp0ZXjmBx7rSEhy)
如果测试不成功:
出现问题ora-12154无法解析指定的连接标识符,
找到D:\app\hvf\product\11.2.0\dbhome_1\NETWORK\ADMIN目录下tnsnames.ora配置文件,添加红框中的配置信息。
如果出现问题ORA-12638: 身份证明检索失败
开始 -> 程序 -> Oracle -> Net Manager→本地→概要文件→Oracle高级安全性→验证→去掉所选方法中的 "NTS" 就可以了.
3.安装Rtools
下载地址:https://cloud.r-project.org/
根据R的版本选择。
4.配置环境变量
右键-》我的电脑-》高级-》环境变量-》系统变量下面的 Path 双击-》,就是 Rtool 的 bin 目录和 gcc 的 bin 目录 即:
C:\Rtools\bin;
C:\Rtools\mingw_64\bin
R软件的安装路径
E:\R-3.3.1\bin\x64
5.下载oracle client
下载红框标注的两个包,并且一起解压到D:\instantclient\x64目录下,该路径不一定是D盘下,根据你自己指定盘符创建目录。
解压成功后,进入D:\instantclient\x64\instantclient_12_1,结果如下
6.安装 DBI 包
7.下载安装 ROracle 包
下载地址:
https://cran.r-project.org/web/packages/ROracle/index.html
将下载的包复制到E:\R-3.3.1\bin\x64下
7.配置系统变量
上面推荐的文档这处有错,改成下面这种配置
OCI_INC =D:\instantclient\x64\instantclient_12_1\sdk\include
OCI_LIB64=D:\instantclient\x64\instantclient_12_1
8.安装
点击开始》运行》进入 cmd 命令窗口 》cd 到 E:\R-3.3.1\bin\x64这个目录下,即 ROracle安装包所在的目录
运行 R CMD INSTALL --build ROracle_1.3-1.tar.gz
显示DONE (ROracle),即安装成功
方法二:通过 RODBC 连接
见(http://wenku.baidu.com/link?url=aexRXQ822IapdnQ2j3zaqfQj611d_XXihumaYx0qCOiEsGUkl0t7p5zrXSHuuQIntyKjuHH-c3IGNfkY8bav15oxph2QNcRmgJKAqYrWYGC),因为没什么大问题,所以不再赘述
R连接数据库代码
library(DBI)
library(ROracle)
drv = dbDriver("Oracle")
#用RODBC
library(RODBC)
channel <- odbcConnect("数据源名称",uid="用户名",pwd="密码")
#用ROracle
host <- "服务器ip地址"
port <- 1521
sid <- "服务名"
connect.string <- paste(
"(DESCRIPTION=",
"(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))",
"(CONNECT_DATA=(SID=", sid, ")))", sep = "")
con <- dbConnect(drv,username = "用户名", password = "密码",dbname = connect.string)
#查询
rs = dbSendQuery(con,"select * from 表")
data = fetch(rs)
若出现
ORA-12638: 身份证明检索失败,按以上提到的处理方法,然后重启R