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

Oracle CloudにあるAutonomous Data WarehouseにJupyter Notebookから接続してみる

はじめに

環境が必要になりインストールしたので、備忘録です。
Python仮想環境には、pyenv + pipenv を利用しました。

  1. Oracle Cloud Infrastructure 環境で Jupyter NotebookとTensorFlowをインストール
    でセットアップした環境に

  2. Oracle CloudにあるAutonomous Data WarehouseにPythonから接続してみる(cx_Oracleの利用)
    の手順を追加して、Notebook環境からAutonomous Data Warehouse(ADW)へ接続をしています。

環境

上記1. を参照

インストール①:Jupyter Notebook

pyenv + pipenv 仮想環境で Jupyter Notebook をインストール

Oracle Cloud Infrastructure 環境で Jupyter NotebookとTensorFlowをインストール

の手順でインストールする。但し後でjupyter notebookを再起動する必要が出てくるので、上記手順のうち「Jupyter Notebookを起動」の直前までを実行する。

インストール②:PythonからOracleへ接続

Oracle Clientと、cx_Oracleをインストールする。
ここでは、コマンドの実行ログを中心に記載する。

詳しい説明は下記参照。(なお、今回はCentOSだが、このとき ↓↓ はUbuntuにインストールしている)

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

Oracle Instant Client のインストール

今回は、自分の $HOME以下にインストールすることにする。

OTNダウンロードサイト:Oracle Instant Client より、
Version 18.5.0.0.0, Base - Basic Package の
instantclient-basic-linux.x64-18.5.0.0.0dbru.zip
をダウンロード。

※ADWのマニュアルでは18.3をインストールしていたので、心配な方は18.3を推奨。

$HOME直下にダウンロードしたファイルを配置し、unzip。

$ unzip instantclient-basic-linux.x64-18.5.0.0.0dbru.zip

展開後、中身を確認。

$ cd instantclient_18_5
$ ls -l
total 227700
-rwxr-xr-x. 1 fn docker     42360 Feb 26 20:04 adrci
-r-xr-xr-x. 1 fn docker      5780 Feb 26 20:04 BASIC_LICENSE
-rw-r--r--. 1 fn docker      1632 Feb 26 20:04 BASIC_README
-rwxr-xr-x. 1 fn docker     66672 Feb 26 20:04 genezi
-rwxrwxr-x. 1 fn docker   8357160 Feb 26 20:04 libclntshcore.so.18.1
lrwxrwxrwx. 1 fn docker        17 Mar 21 16:48 libclntsh.so -> libclntsh.so.18.1 ★★★
(略)

★★★は、インストール手順によると、無ければシンボリックリンクを作成せよとのことだったが、既に存在していたので特に何もしない。

LD_LIBRARY_PATHの設定

$HOME/.bash_profile に追加

.bash_profile
export LD_LIBRARY_PATH=/home/自分のユーザ名/instantclient_18_5:$LD_LIBRARY_PATH

cx_Oracleのインストール

https://cx-oracle.readthedocs.io/en/latest/installation.html

に従って行う。pipenv環境なので、インストールは pipenv install ~ で実行する。

$ cd mypj

$ pipenv install cx_Oracle
Installing cx_Oracle...
Adding cx_Oracle to Pipfile's [packages]...
? Installation Succeeded
Pipfile.lock (065acf) out of date, updating to (dbf860)...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
? Success!
Updated Pipfile.lock (065acf)!
Installing dependencies from Pipfile.lock (065acf)...
   ???????????????????????????????? 121/121 ― 00:01:21
$

libaioのインストール

手順の中ではInstant Clientのインストール欄に書かれていたが、libaioをインストール。...しようとしたが既に入ってた。

$ sudo yum install libaio
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                                                                                             |  17 kB  00:00:00
 * base: mirrors.maine.edu
 * epel: mirror.compevo.com
 * extras: mirror.cs.uwp.edu
 * updates: linux.mirrors.es.net
base                                                                                                                             | 3.6 kB  00:00:00
dockerrepo                                                                                                                       | 2.9 kB  00:00:00
epel                                                                                                                             | 4.7 kB  00:00:00
extras                                                                                                                           | 3.4 kB  00:00:00
updates                                                                                                                          | 3.4 kB  00:00:00
(1/4): epel/x86_64/updateinfo                                                                                                    | 1.0 MB  00:00:00
(2/4): epel/x86_64/primary_db                                                                                                    | 6.6 MB  00:00:00
(3/4): extras/7/x86_64/primary_db                                                                                                | 187 kB  00:00:00
(4/4): updates/7/x86_64/primary_db                                                                                               | 3.3 MB  00:00:00
Package libaio-0.3.109-13.el7.x86_64 already installed and latest version
Nothing to do
$

インストールできたことを確認

Instant Client と cx_Oracleがインストールできたことを確認

  • LD_LIBRARY_PATHを有効にするため .bash_profile を読み込む
$ . ~/.bash_profile
$ env |grep LD
LD_LIBRARY_PATH=/home/fn/instantclient_18_5: <-- Instant Clientのディレクトリに通っていることを確認
  • 特定のディレクトリ(ここではmypj)に移動し、pipenv shell で 仮想環境を有効にしてからpython実行する
[fn@yuzu ~]$ cd mypj
[fn@yuzu mypj]$ pipenv shell
Launching subshell in virtual environment...
 . /home/fn/.local/share/virtualenvs/mypj-CamC0rlR/bin/activate
[fn@yuzu mypj]$  . /home/fn/.local/share/virtualenvs/mypj-CamC0rlR/bin/activate
(mypj) [fn@yuzu mypj]$ python
Python 3.6.8 (default, Mar 12 2019, 06:34:05)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>> cx_Oracle.clientversion()
(18, 5, 0, 0, 0)
>>> exit()
(mypj) [fn@yuzu mypj]$

ADW環境への接続

冒頭でも参照している 「Oracle CloudにあるAutonomous Data WarehouseにPythonから接続してみる(cx_Oracleの利用)」のADW環境への接続 を参照し、以下の情報やファイルを準備する。

  • 接続するためのWallet_XXX.zip(クライアント・セキュリティ資格証明のファイル一式 )★① Wallet_myadw.zip
  • 接続に使用する、ネット・サービス名(tnsnames.oraのエントリのこと)★②myadw_high
  • 接続するデータベースユーザの名前・パスワード ★③scott/tiger

それぞれの情報は、ここでは★①、★②、★③とする。

必要なファイルを network/admin/以下に配置

★①を instantclient_18_5/network/admin/以下で unzip

$ mv Wallet_myadw.zip ~/instantclient_18_5/network/admin/
$ cd ~/instantclient_18_5/network/admin/
$ unzip Wallet_myadw.zip

Jupyter Notebookを起動

LD_LIBRARY_PATHを有効にしてから、Notebookを起動する。
(既に起動済みの場合は一旦停止し、下記手順を実行)

$ . ~/.bash_profile
$ cd mypj
$ pipenv shell <-- まだpipenv仮想環境に入っていない場合は実行する
$ jupyter-notebook &
[1] 2293
$ [I 12:22:06.152 NotebookApp] Writing notebook server cookie secret to /home/fn/.local/share/jupyter/runtime/notebook_cookie_secret
[I 12:22:06.387 NotebookApp] Serving notebooks from local directory: /home/fn/mypj
[I 12:22:06.387 NotebookApp] The Jupyter Notebook is running at:
[I 12:22:06.387 NotebookApp] http://(yuzu or 127.0.0.1):8888/
[I 12:22:06.387 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

アクセスして新規Notebookを開く

ブラウザから http://<Public IP アドレス>:8888/
Jupyter Notebook用に指定したパスワードを入力し、Log in.
New -> Python3 で新規Notebookを開く

ADWに接続しSQLを実行

Notebook内に以下のように入力し、実行する。
cx_Oracle.connect()に、接続情報(上の★②、★③)を指定。

sql=で指定したSQLの実行結果が表示される。

image.png

入力した内容(コピペ用)

※conn= を環境に合わせて変更する。

import cx_Oracle
conn=cx_Oracle.connect(user='scott',password='tiger',dsn='myadw_high')

sql='select table_name, status from user_tables'
print(sql)
cur = conn.cursor()
for row in cur.execute(sql):
    print(row)

※LD_LIBRARY_PATHが通ってない場合は、実行時に以下のエラーが出る
DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so: cannot open shared object file: No such file or directory".

参考

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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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