rlwrap

rlwrap은 GNU readline wrapper로, history 기능과 tab-completion 기능등을 제공한다. sqlplus/isql 등 텍스트 기반 tool 에 연동시켜 사용할 목적으로 설치했기 때문에,  추가적인 기능은 readline 라이브러리 문서와 rlwrap 문서를 읽어보길 권한다.  기본 편집 모드가 emacs환경이기 때문에 vi환경으로 변경해서 사용하려고 한다. sqlplus에서의 rlwrap기본적인 사용방법은 Mike Smithers’ Blog에서 참조했으며, rlwrap-extention 설치는 d-h-n.de Blog를  참고했다.

Setup

설치는 system 권한이 필요하므로 root 계정을 사용하던가 sudo를 사용해서 설치한다.

  • rlwrap
wget http://dl.fedoraproject.org/pub/epel/5/x86_64/rlwrap-0.37-1.el5.x86_64.rpm
sudo rpm -Uvh rlwrap-0.37-1.el5.x86_64.rpm
rm rlwrap-0.37-1.el5.x86_64.rpm
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/rlwrap-0.37-1.el6.x86_64.rpm
sudo rpm -Uvh rlwrap-0.37-1.el6.x86_64.rpm
rm rlwrap-0.37-1.el6.x86_64.rpm

 

  •  rlwrap-extention : oracle 11.2.0.3 버전용 V11-0.05 버전 설치
#cd RLWRAP_HOME
cd /usr/share/rlwrap/completions
#get rlwrap-extention
wget http://www.linuxification.at/download/rlwrap-extensions-V11-0.05.tar.gz
#unzip
tar xzf rlwrap-extensions-V11-0.05.tar.gz
rm rlwrap-extensions-V11-0.05.tar.gz
#fix sql+ and cp sql+, asm+ to /usr/local/bin
cat sql+ | sed -e's/local\///' >/usr/local/bin/sql+
cp  asm+ > /usr/local/bin/asm+

 

Customizing  for vi-mode

readline 라이브러리의 vi-mode와 emacs-mode 변경 단축키는 M-C+j 로 정의되어 있다. 이 키 사용이 귀찮기도 하고 기억하기도 애매하기 때문에 .inputrc 파일을 생성하여 vi-mode로 시작하도록 설정한다. 주의! .inputrc 파일은 최초 로그인 할 때 한 번 읽기 때문에, 설정 후에는 OS logout 후 다시 login 해야 적용된다.

# for vi-mode
set editting-mode vi

 

How to Use rlwrap + sqlplus

sql+ 를 보면 내부적으로 sqlplus를 호출하도록 되어 있고, sql+ 명령은 sqlplus / as sysdba 와 동일하며, scott/tiger 로 로그인 하려면 sql+ scott/tiger 명령을 실행하면 된다. 눈으로 확인하는게 젤 빠르므로 $ORACLE_HOME/sqlplus/admin/glogin.sql에 sqlprompt 내용을 추가해 봤다.

set sqlprompt "_USER'@'_CONNECT_IDENTIFIER _PRIVILEGE> "

다음은 rlwrap 기능 테스트한 내용이다.

[oracle@ora11gr2 ~]$ sql+
SYS@orcl AS SYSDBA> select file_name from dba_data_file;
FILE_NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/users.259.844452675
+DATA/orcl/datafile/undotbs1.258.844452675
+DATA/orcl/datafile/sysaux.257.844452675
+DATA/orcl/datafile/system.256.844452675
+DATA/orcl/datafile/example.265.844452785

SYS@orcl AS SYSDBA> select name from v$data     --<< TAB키 누름
SYS@orcl AS SYSDBA> select name from V$DATA     --<< TAB키 누름
V$DATABASE                   V$DATAFILE_HEADER
V$DATABASE_BLOCK_CORRUPTION  V$DATAGUARD_CONFIG
V$DATABASE_INCARNATION       V$DATAGUARD_STATS
V$DATABASE_KEY_INFO          V$DATAGUARD_STATUS
V$DATAFILE                   V$DATAPUMP_JOB
V$DATAFILE_COPY              V$DATAPUMP_SESSION
SYS@orcl AS SYSDBA> select name from V$DATAf    --<< TAB키 누름
SYS@orcl AS SYSDBA> select name from V$DATAF    --<< TAB키 누름
SYS@orcl AS SYSDBA> select name from V$DATAFILE;
NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/system.256.844452675
+DATA/orcl/datafile/sysaux.257.844452675
+DATA/orcl/datafile/undotbs1.258.844452675
+DATA/orcl/datafile/users.259.844452675
+DATA/orcl/datafile/example.265.844452785

SYS@orcl AS SYSDBA> l1
  1* select name from V$DATAFILE
SYS@orcl AS SYSDBA> c /V$DATAFILE/dba_data_files/
  1* select name from dba_data_files
SYS@orcl AS SYSDBA> c /name/file_name/
  1* select file_name from dba_data_files
SYS@orcl AS SYSDBA> /

FILE_NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/users.259.844452675
+DATA/orcl/datafile/undotbs1.258.844452675
+DATA/orcl/datafile/sysaux.257.844452675
+DATA/orcl/datafile/system.256.844452675
+DATA/orcl/datafile/example.265.844452785

SYS@orcl AS SYSDBA> --<< ESC 키 누른후 원하는 쿼리가 나올때 까지.. k를 누름
SYS@orcl AS SYSDBA> select name from V$DATAFILE;

NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/system.256.844452675
+DATA/orcl/datafile/sysaux.257.844452675
+DATA/orcl/datafile/undotbs1.258.844452675
+DATA/orcl/datafile/users.259.844452675
+DATA/orcl/datafile/example.265.844452785

SYS@orcl AS SYSDBA> --<< ESC 키 누른후 k / 누르고 dba_data_file 입력후 엔터
SYS@orcl AS SYSDBA> /dba_data_file
SYS@orcl AS SYSDBA> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/users.259.844452675
+DATA/orcl/datafile/undotbs1.258.844452675
+DATA/orcl/datafile/sysaux.257.844452675
+DATA/orcl/datafile/system.256.844452675
+DATA/orcl/datafile/example.265.844452785

Line            1: sql+ 로 rlwrap 사용
Line  12,24: tab-completion 테스트
Line  32,34: rlwrap line editting 중 변경기능 테스트 , 추가적인 editing 키로 a , i 등이 있음.
Line        46: history 기능 (vi-mode ESC-k) 테스트, 상하 방향키로도 동작한다.
Line        57: history serch 기능 (vi-mode ESC-k-/) 테스트

rlwrap 테스트 결론

  • 히스토리 기능에서 쓸만한 것은  ~/.sqlplus_history 파일에 사용한 쿼리들이 저장되어 리뷰가 가능하다는 것 외에 실상 쿼리 블럭이 여러 줄에 걸쳐 있을 경우 한 줄 한 줄 히스토리를 이용한다는 건 낭비라고 생각한다. 오히려 터미널 창에서 sql block 코드를 copy & paste 한 후 ed 명령으로 편집하는게 정신건강에 좋을 것 같다.
  • tab 완성기능은 조금 낯을 가리는 느낌이지만, 익숙해지면 쓸만할 것 같다. 게다가 rlwrap-extention dictionary를 vim  dic에 등록한다면, vim에서도 tab 완성 기능을 동일하게 사용가능하다.
  • vim에서도 그렇지만,  c, a, i  라인 편집중에는 tab 완성이 동작하지 않는다.
About these ads

댓글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중