티스토리 뷰

앞서 docker 로 오라클 db 를 구축해놨는데, R 프로그램으로 오라클에 접속해본다. 여러가지 방법이 있긴한데.. jdbc driver 를 사용하는게 그나마 간단하게 접속할 수 있었다. 여러가지 방법이 있긴하다. 성능까지 비교한 글이 있어 참고하면 좋을 듯 하다. 

https://blogs.oracle.com/r/r-to-oracle-database-connectivity%3a-use-roracle-for-both-performance-and-scalability-2018

 

R to Oracle Database Connectivity: Use ROracle for both Performance and Scalability (2018)

R users have a few choices of how to connect to Oracle Database. The most commonly seen include: RODBC, RJDBC, and ROracle. However, these three packages have significantly different performance and scalability characteristics, which can greatly impact you

blogs.oracle.com

 

우선 RJDBC 라이브러리를 활용하기로 했으니, jdbc 다운로드 하러 오라클 웹페이지를 가자.

https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html

 

JDBC and UCP Downloads page

No results found Your search did not match any results. We suggest you try the following to help find what you're looking for: Check the spelling of your keyword search. Use synonyms for the keyword you typed, for example, try “application” instead of “sof

www.oracle.com

 

ojdbc8.jar 파일을 받는다. 나중에 R 프로그램에서 읽을 수 있도록 경로만 대략 기억하고,

 

마지막으로, java jdk 가 필요한데, 난 아래 링크에서 java jdk 13 맥용으로 다운받았다. 

https://jdk.java.net/13/

 

JDK 13.0.2 GA Release

JDK 13.0.2 General-Availability Release Documentation Build 8 (2019/12/11): General Availability These open-source builds are provided under the GNU General Public License, version 2, with the Classpath Exception. Commercial builds of JDK 13.0.2 from Oracl

jdk.java.net

다운받아서 압축을 풀고, /Library/Java/JavaVirtualMachines/ 경로에 붙여 넣는다.

 

R studio 를 열고, RJDBC 를 로드하려 하는데, 오류가 발생한다.

> library(RJDBC)
Loading required package: DBI
Loading required package: rJava
Error: package or namespace load failed for ‘rJava’:
 .onLoad failed in loadNamespace() for 'rJava', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/Library/Frameworks/R.framework/Versions/3.6/Resources/library/rJava/libs/rJava.so':
  dlopen(/Library/Frameworks/R.framework/Versions/3.6/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/lib/server/libjvm.dylib
  Referenced from: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rJava/libs/rJava.so
  Reason: image not found
Error: package ‘rJava’ could not be loaded

 

rJava 에서 찾는 jdk 경로가 이상하다. 11버전이 있지도 않은데, 왜 저런 경로를 찾아서 library가 로드도 못하는지.. 열심히 구글링 해서 아래 2개 링크를 찾았다. 맥에서 주로 발생하는 문제같은데, 아래 명령어로 수정이 되었다. 

(참고) https://github.com/s-u/rJava/issues/151#issuecomment-395070694
(참고) https://yunhwankim2.github.io/2019/09/25/rstudio-rjava/

install_name_tool -change \
/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/lib/server/libjvm.dylib \
/Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home/lib/server/libjvm.dylib \
/Library/Frameworks/R.framework/Versions/3.6/Resources/library/rJava/libs/rJava.so

 

docker 로 oracle db 를 run 한다. 이전글을 참고한다.

 

이제 R 프로그램으로 오라클db 와 연결한다.

library(RJDBC)
jdbc_driver = JDBC("oracle.jdbc.OracleDriver", classPath = "../docker/oracle/18.4.0/r/ojdbc8.jar")
con = dbConnect(jdbc_driver, "jdbc:oracle:thin:@//localhost:1521/xepdb1", "sys as sysdba", "1")

 

아래 쿼리의 결과가 R studio 에 표시된다.

> dbGetQuery(con, 'select * from hr.jobs')
       JOB_ID                       JOB_TITLE MIN_SALARY MAX_SALARY
1     AD_PRES                       President      20080      40000
2       AD_VP   Administration Vice President      15000      30000
3     AD_ASST        Administration Assistant       3000       6000
4      FI_MGR                 Finance Manager       8200      16000
5  FI_ACCOUNT                      Accountant       4200       9000
6      AC_MGR              Accounting Manager       8200      16000
7  AC_ACCOUNT               Public Accountant       4200       9000
8      SA_MAN                   Sales Manager      10000      20080
9      SA_REP            Sales Representative       6000      12008
10     PU_MAN              Purchasing Manager       8000      15000
11   PU_CLERK                Purchasing Clerk       2500       5500
12     ST_MAN                   Stock Manager       5500       8500
13   ST_CLERK                     Stock Clerk       2008       5000
14   SH_CLERK                  Shipping Clerk       2500       5500
15    IT_PROG                      Programmer       4000      10000
16     MK_MAN               Marketing Manager       9000      15000
17     MK_REP        Marketing Representative       4000       9000
18     HR_REP  Human Resources Representative       4000       9000
19     PR_REP Public Relations Representative       4500      10500

 

다 사용했다면, 커넥션을 끊는다. 

> dbDisconnect(con)
[1] TRUE
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함