Help us understand the problem. What is going on with this article?

Oracle CloudにあるAutonomous Data WarehouseにRから接続してみる(ROracleの利用)

■■■Oracle Cloudのウェビナーシリーズは→こちら■■■

はじめに

ROracleは、RからOracle Databaseに接続する際に利用します。
Rプログラムを実行するクライアント側にインストールして利用します。

Oracle Autonomous Data Warehouse(ADW)はOracle Cloud Infrastructure(OCI)環境にあるAutonomousで超高速なデータベースですが、これもOracle Databaseなので、ROracleで接続できます。

具体的には、

  • Oracle Client (Instant Client でも Full Clientでも良いが、今回は前者を利用。Instant Clientの場合、ROracleを動かすにはSDKのインストールも必要。)
  • ROracle

をインストールします。

※以前、Python -- cx_Oracle -- Oracle Instant Client -- ADW で接続してみましたが、それのRでやってみた版です。

環境

  • Ubuntu (WSL上の)
  • R version 3.5.2

※Rのインストールは、以下を参考にしました。
WSLのUbuntu 18.04にRをインストールする

※WSL=Windows Subsystem for Linux

インストール

公式ドキュメントの英語版・日本語版

に従って実施。以下やったこと。

Instant Client のインストール

今回は /u01/app/oracle 以下にインストールすることにする。

OTNダウンロードサイト:Oracle Instant Client より、Version 18.3.0.0.0 の、

  • Base - Basic Package の、 instantclient-basic-linux.x64-18.3.0.0.0dbru.zip
  • Development and Runtime - SDK Package の、 instantclient-sdk-linux.x64-18.3.0.0.0dbru.zip

2つをダウンロード。

/u01/app/oracle 直下にダウンロードしたファイルを配置し、unzip。

$ mkdir -p /u01/app/oracle
$ cd /u01/app/oracle 
$ unzip instantclient-basic-linux.x64-18.3.0.0.0dbru.zip
$ unzip instantclient-sdk-linux.x64-18.3.0.0.0dbru.zip

シンボリックリンクの状況は、前回 と同じだったので割愛。

libaioのインストール

前回 と同じ環境なので今回は実施していない。

ROracleのインストール

ADWのドキュメント該当箇所からは、

ROracle: To install ROracle for R, use the instructions on the following page: ROracle

で、INSTALL用のREADME的な資料に飛ぶので、それを参考にして実施。

Oracle Instant Clientの場合は、SDKが必要なことは冒頭に記載あり。

If using an Oracle Instant Client, you need
either the Basic or Basic Lite packages in addition to the SDK package.

ROracleをダウンロード

上のREADMEのひとつ上のディレクトリ:
http://cran.cnr.berkeley.edu/web/packages/ROracle/
から、ROracle_1.3-1.tar.gz をダウンロードした。

環境変数 LD_LIBRARY_PATH と OCI_LIB を設定

$ export LD_LIBRARY_PATH=/u01/app/oracle/instantclient_18_3:$LD_LIBRARY_PATH
$ export OCI_LIB=/u01/app/oracle/instantclient_18_3

ROracleをインストール

$ R CMD INSTALL --configure-args='--with-oci-inc=/u01/app/oracle/instantclient_18_3/sdk/include --with-oci-lib= /u01/app/oracle/instantclient_18_3' ROracle_1.3-1.tar.gz

公式ドキュメント(README的なやつ)では、環境変数LD_LIBRARY_PATH と OCI_LIBの2つを設定すれば、インストールは R CMD INSTALL ROracle_1.3-1.tar.gz だけでOKのはず。なのだが、色々とエラーで進めなかったので、今回は上記のように --configure-args 内で--with-oci-inc= と--with-oci-lib= の2つを指定して実行した。

補足

R CMD INSTALL ROracle_1.3-1.tar.gz 実行で失敗していた際のエラーメッセージ。丁寧な確認ができなかったので手順ミスの可能性はあるが、備忘録として。

R CMD INSTALL 時のエラー:その①

configure: error: OCI libraries not found
ERROR: configuration failed for package ‘ROracle’

R CMD INSTALL 時のエラー:その②

Error: package or namespace load failed for ‘ROracle’ in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/usr/local/lib/R/site-library/ROracle/libs/ROracle.so':
  libclntsh.so.18.1: cannot open shared object file: No such file or directory

ADW環境への接続

ROracle 詳しい方へ:ざっくり説明

ADWに特化した情報としては、

  • 接続に必要なクライアント資格証明ファイル一式(Wallet_XXX.zip)が必要で、Oracle Clientの network/admin 配下に置き展開
  • *.zip内に tnsnames.ora も含むので、R からは dsn= で、tnsnames.ora のエントリ(ネット・サービス名)を指定
  • ※ ADWではインスタンス作成時に3つの事前定義されたネット・サービス名が作られる( XXX_high, _medium, _low ) ので、通常はそのどれかを指定すればよい

準備・接続に必要なセキュリティ資格証明を設定

前回 と全く同じなので割愛。

Oracle Instant Client のインストール箇所が前回と異なるため、network/admin の場所は適宜読み替えて実行。

  • 前回:$HOME/instantclient_18_3/network/admin/
  • 今回:/u01/app/oracle/instantclient_18_3/network/admin/

ADWに接続しSQLを実行

dbConnect()に、接続情報を指定する。
dbname=にtnsnames.oraのエントリを指定。

$ export LD_LIBRARY_PATH=/u01/app/oracle/instantclient_18_3:$LD_LIBRARY_PATH
$ export OCI_LIB=/u01/app/oracle/instantclient_18_3

$ R

R version 3.5.2 (2018-12-20) -- "Eggshell Igloo"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library(ROracle)
Loading required package: DBI
> drv <- dbDriver("Oracle")
> con <- dbConnect(drv, username = "scott", password="tiger", dbname="myadw_high")
> res <- dbSendQuery(con, "select * from sh.costs")
> fetch(res,n=10)
   PROD_ID    TIME_ID PROMO_ID CHANNEL_ID UNIT_COST UNIT_PRICE
1      118 2000-12-31      999          4         7          7
2      120 2000-07-06      999          2         8          8
3      120 2000-07-23      999          2         8          8
4      120 2000-08-01      999          2         8          8
5      120 2000-08-09      999          2         8          8
6      120 2000-08-14      999          2         8          8
7      120 2000-08-31      999          2         8          8
8      120 2000-10-04      999          2         8          8
9      120 2000-11-02      999          2         8          8
10     120 2000-11-03      999          2         8          8
>
> quit()
$

参考

前回前回言ってるのはこちら:
Oracle CloudにあるAutonomous Data WarehouseにPythonから接続してみる(cx_Oracleの利用)

mikika
ここでの発言は私個人の見解であり、所属する会社&組織の見解を反映したものではありません。
oracle
Oracle Cloudは、最先端の機能をSoftware as a Service、Platform as a ServiceおよびInfrastructure as a ServiceおよびData as a Serviceとして提供します。
https://cloud.oracle.com/ja_JP/home
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away