はじめに
環境が必要になりインストールしたので、備忘録です。
Python仮想環境には、pyenv + pipenv を利用しました。
-
Oracle Cloud Infrastructure 環境で Jupyter NotebookとTensorFlowをインストール
でセットアップした環境に -
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 に追加
export LD_LIBRARY_PATH=/home/自分のユーザ名/instantclient_18_5:$LD_LIBRARY_PATH
cx_Oracleのインストール
に従って行う。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の実行結果が表示される。
入力した内容(コピペ用)
※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".