write ahead log

ロールフォワード用

WSLのUbuntuにsqlplus(Oracle client)を入れる

何でも動いてビビっちゃうWSLですが, sqlplusを入れてみました.

ますますWSL環境に引きこもりそうです.

ダウンロード

この辺からどうぞ.

Oracle Database 12c Release 1 (12.1.0.2.0)

ユーザ登録が要るの, 面倒ですけど.

libaio1とalienをインストール

oracleからはrpm形式で配布されているのでdeb形式に変換します.

変換に必要なalienをとりあえずインストール.

$ sudo apt-get install libaio1
$ sudo apt-get install alien

deb形式に変換する

$ sudo alien oracle-instantclient12.1-basic-12.1.0.1.0-1.x86_64.rpm
$ sudo alien oracle-instantclient12.1-devel-12.1.0.1.0-1.x86_64.rpm
$ sudo alien oracle-instantclient12.1-sqlplus-12.1.0.1.0-1.x86_64.rpm

インストール

sudo dpkg -i oracle-instantclient12.1-basic_12.1.0.1.0-2_amd64.deb
sudo dpkg -i oracle-instantclient12.1-devel_12.1.0.1.0-2_amd64.deb
sudo dpkg -i oracle-instantclient12.1-sqlplus_12.1.0.1.0-2_amd64.deb

環境設定

.profileとか.bashrcとかどこかに.

# oracle client
export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib
export NLS_LANG=Japanese_Japan.UTF8
export PATH=$PATH:/usr/lib/oracle/12.1/client64/bin

この時点でbash再起動か

$ source .profile

で再読み込みしておきます.

prelinkしておく

この時点で動くかなと思ったのですが, 下記のエラーが出て動作しませんでした.

sqlplus: error while loading shared libraries: libclntsh.so.12.1: cannot enable executable stack as shared object requires: Invalid argument

ここは無能らしくstack overflowの意見を鵜呑みにします

sudo apt-get install prelink
sudo execstack -s /usr/lib/oracle/12.1/client64/bin/sqlplus

これで動作しました.

余談:prelinkって何や

こちらを参考にすると, shared objectをあらかじめ組み込んでしまうソフトだそうです.

へー.知らなかった.

ところで上記で実行したのは

execstack

ですが, こちらはセキュリティ機構の回避のためのコマンドらしいです.

Exec Sheildって初めて聞きました.

さらに余談

HOMEにoradiagディレクトリが出来て邪魔だったのですが消す方法があると知ってとてもうれしかったです.