エンジニア成長日記

成長するにはインプットばかりでなく、アウトプットも必要である。日々の成長記録を書き留めていきたい。

SQL*Plusに履歴機能と補完機能を追加する方法

はじめに

Oracle Databaseを構築する際に、必ずと言っていいほど利用する「SQL*Plus」ですが、 Mysqlのように 履歴機能 ※1 や 補完機能 ※2 する機能が残念ながら装備されていません。

今回は、SQL*Plus(CentOS環境)で 履歴機能 や 補完機能 を追加する手順を紹介します。

※1. 履歴("↑"キーにてhistory表示)やC-rでインクリメンタルな履歴検索を実現する機能 ※2. タブを押すことで補完を実現する機能

利用パッケージ

名称 機能 説明 備考
readline 履歴機能 CUI アプリケーションにおいてユーザが行を入力する際に便利な「行頭・行末移動」「履歴機能」などを提供するパッケージ Linux上でbashを利用している場合、インストールされてます。
rlwrap 補完機能 readlineをラッピングし、「readline」の機能に加え、補完機能を提供するパッケージ

履歴機能の追加手順

readlineのインストール確認
  • readlineパッケージがインストール済みか確認します。 ※ヘッダファイル(devel)も含む
rpm -qa --qf "%{name}-%{version}-%{release}.%{arch}\n" | grep readline
readline-5.1-3.el5.i386
readline-5.1-3.el5.x86_64
readline-devel-5.1-3.el5.i386
readline-devel-5.1-3.el5.x86_64
rlwrapライブラリのインストール

rlwrapライブラリを、インストールする場合は、次の3つの方法がありますが、今回は、「ソースコードコンパイルしてインストール」する手順になります。

  1. EPELリポジトリ追加し、「yum」コマンドでインストールする
  2. rpm」パッケージをインストールする
  3. ソースコードコンパイルしてインストールする

  4. 提供元のサイトより、ダウンロードします。

wget http://utopia.knoware.nl/~hlub/rlwrap/rlwrap-0.42.tar.gz
  • ダウンロードしたファイル(rlwrap-0.42.tar.gz)を解凍します。
tar xvfz rlwrap-0.42.tar.gz
cd rlwrap-0.42

./configure

make & make install
  • インストールされたコマンドのパスを通す。
whereis rlwrap
rlwrap: /usr/local/bin/rlwrap

vi /etc/profile
(以下、追記)
PATH=/bin:/bin:/usr/bin/:/usr/local/bin:/usr/X11R6/bin/:$PATH
export PATH
動作確認
  • 履歴機能がSQL*Plusで利用できるようになったことを確認します。
rlwrap sqlplus /nolog


SQL>↑↓キーによる履歴表示
SQL> Ctr + R による履歴検索

※補足 履歴ファイルとして、ホームディレクトリ配下に「.sqlplus_history」が生成されています。

補完機能の追加手順

ダウンロード
  • Linuxification.at: rlwrap_extより対応するOracleのバージョンのURLをコピーしてください。

  • コピーしたURLにて、パッケージをダウンロードします。

wget http://www.linuxification.at/download/rlwrap-extensions-V10-0.08.tar.gz
展開
  • 辞書ファイルの格納場所となるフォルダを作成します。
mkdir /home/user/oracle/sqlplus-dictionary
  • ダウンロードしたファイル(rlwrap-0.42.tar.gz)を解凍します。
cd /home/user/oracle/sqlplus-dictionary
tar xvfz /tmp/rlwrap-extensions-V10-0.08.tar.gz
asmcmd
README
README.english
rman
sql+
sqlplus
sqlplus.all
sqlplus.dba
sqlplus.dbms_packages
sqlplus.functions
sqlplus.gvdollar
sqlplus.init
sqlplus._init
sqlplus.rman
sqlplus.tables
sqlplus.user
sqlplus.utl_packages
sqlplus.vdollar
動作確認
  • 補完機能がSQL*Plusで利用できるようになったことを確認します。

    • 各オプションについて

      -pRed...プロンプトに色をつけるオプション。 -f...辞書ファイルの場所を定義するオプション。※複数指定する事も可能。今回は、基本SQLコマンドのみとしている。 -i...小文字の入力でも、補完できるようにするオプション。※デフォルトでは、大文字でのキーワードしか辞書ファイルに定義されていない。

rlwrap -pRed -if ~/sqlplus-dictionary/sqlplus sqlplus /nolog

SQL> SEL による補完機能
SQL> SELECT
SQL> sel による補完機能 ※小文字も対応可
SQL> SELECT 

※補足  必要に応じて、以下のようなaliasの設定をすると便利です。

vi /etc/bashrc

(以下、追記)

alias sqlplus='/usr/local/bin/rlwrap -pRed -if /home/oracle/sqlplus-dictionary/sqlplus $ORACLE_HOME/bin/sqlplus'

参考サイト

rlwrap 提供サイト

http://utopia.knoware.nl/~hlub/rlwrap/

rlwrap-ext (辞書ファイル)提供サイト

http://www.linuxification.at/rlwrap_ext.html.en