在R中鏈接Oracle數據庫

原文地址:html

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

實際上學習R語言,主要是爲了研究時間序列,相比Python的pandas,R中的包要強悍不少。
而使用R鏈接Oracle數據庫的需求,實際是1個同事打算使用R語言對數據庫直接進行操做,而不須要每次都導出數據再進行操做。而實際上咱們公司是使用Python進行數據分析的。
而在R中,要實現與Oracle數據庫的操做,主要有3個包可使用:web

  • RODBC
  • RJDBC
  • ROracle

RODBC惹的禍

而最開始他選擇的是RODBC,主要是由於在Windows下進行操做。結果卡在了以下的異常中:sql

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系統中上述操做沒法設置成功。
其配置頁面相似以下:windows

ODBC

ODBC設置成功後就能夠經過以下的方式操做Oracle數據庫了: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個包:ui

  • 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...
相關文章
相關標籤/搜索