끄적거림

[R쓸신잡]DB연결 in R with ROracle package 본문

R쓸신잡

[R쓸신잡]DB연결 in R with ROracle package

Signing 2020. 6. 17. 08:00
728x90
반응형

실무에서 데이터분석을 하다보면 필요한 데이터를 DB에서 수시로 내려받아야할 순간이 온다.

하지만 언제까지 DB 툴에서 Excel로 내려 받을 수는 없으니 DB와 직접 연결하여 R 자체에서 데이터를 불러와보자.

 

본 코드와 내용은 Oracle 기준이고 Oracle DB와 연동할 수 있는 방법은 총 3가지(패키지)가 있다.

1) RJDBC

2) RODBC

3) ROracle


대망의 마지막 ROracle package!!

ROracle의 경우 해당 document는 아래 url로 확인하면 된다.

ROracle document: https://cran.r-project.org/web/packages/ROracle/ROracle.pdf

 

ROracle은 설치가 굉장히 힘들고 그 과정에서 에러도 많이 발생하는 것으로 알고 있다. 내가 작성한 순서대로 해보고 잘되길 기도해보자....

 

 

1. Install Rtools & Java

아마 R을 어느정도 사용해본 User라면 Rtools정도는 설치가 되어있을 것이라 생각된다. 하지만 그러지 않은 분들을 위해 간략히 설치 과정을 적자면 해당 URL에 접속하여 자신의 PC 환경에 맞는 rtools를 설치한다.

Rtools: https://cran.r-project.org/bin/windows/Rtools/

 

Using Rtools40 on Windows

Starting with R 4.0.0 (released April 2020), R for Windows uses a brand new toolchain bundle called rtools40. This version of Rtools upgrades the mingw-w64 gcc toolchains to version 8.3.0, and introduces a new build system based on msys2, which makes easie

cran.r-project.org

또한, Java도 설치가 되어있어야 한다. java도 Oracle의 언어이니 필수적이라고 할 수 있다. 첫번째 시간에서처럼 RJDBC와 마찬가지로 환경변수 세팅도 잘 되어 있어야한다. 만약 환경변수를 세팅해주었음에도 불구하고 제대로 작동이 안된다면 R 자체에서 환경변수를 설정해보는 시도를 해보자.

 

 

2. Install DBI & ROracle package

해당 패키지들을 설치하고 임포트하자. library까지 잘 된다면 성공인 것이다! 잘 안된다면 내가 알고 있는 방법으로는 해결책이 없다. 수많은 컴퓨터에 설치를 해보았고, 그 중에 어떤 컴퓨터는 별다른 세팅없이 설치가 되는 반면, 어떤 컴퓨터에서는 리셋을 시켜보아도 작동하지 않을 때가 있다. 개발이 범용적인 측면에서 이루어지지 않은 것 같다는 생각일 뿐이다.

install.packages(c("DBI", "ROracle"))
library(DBI)
library(ROracle)

 

 

 

3. Create Driver

ROracle의 드라이버 생성은 아래 코드처럼 매우 간단하다. dbDriver( )함수를 사용하고, 안에 "Oracle"이라는 단어만 적어주면 드라이버 객체가  생성된다.

driv <- dbDriver("Oracle")

 

 

 

4. DB Connection

이후 과정은 RJDBC와 동일하다고 보면 된다.

connect.string <- paste(
  "(DESCRIPTION=",
  "(ADDRESS=(PROTOCOL = TCP)(HOST = **Host name**)(PORT = **port**))",
  "(CONNECT_DATA=(SERVER = **보안**)",
  "(SERVICE_NAME = **DB name**)))", sep = "")

conn <- dbConnect(driv, username = "**ID**", password = "**PWD**", dbname = connect.string)
data <- dbGetQuery(conn, "select * from table_name")

 

 

 

 

 

728x90
반응형
Comments