티스토리 뷰
앞서 docker 로 오라클 db 를 구축해놨는데, R 프로그램으로 오라클에 접속해본다. 여러가지 방법이 있긴한데.. jdbc driver 를 사용하는게 그나마 간단하게 접속할 수 있었다. 여러가지 방법이 있긴하다. 성능까지 비교한 글이 있어 참고하면 좋을 듯 하다.
우선 RJDBC 라이브러리를 활용하기로 했으니, jdbc 다운로드 하러 오라클 웹페이지를 가자.
https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html
ojdbc8.jar 파일을 받는다. 나중에 R 프로그램에서 읽을 수 있도록 경로만 대략 기억하고,
마지막으로, java jdk 가 필요한데, 난 아래 링크에서 java jdk 13 맥용으로 다운받았다.
다운받아서 압축을 풀고, /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
- github
- 아이맥
- ggplot2
- ubuntu
- Spring
- vagrant
- ipTIME
- 자급제폰
- MongoDB
- python
- javascript
- 셀프개통
- ggplot
- 알뜰요금제
- MyBatis
- Oracle
- 도넛차트
- 이클립스
- java
- SVN
- Google Chart Tools
- heroku
- 맥북
- 마인크래프트
- ktm모바일
- 막대그래프
- MySQL
- docker
- R
- eclipse
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |