解决linux中sqlplus上下键显示历史sql语句

来源:http://www.boobooke.com/bbs/thread-18020-1-1.html

总而言之,SQL*PLUS在Linux没有命令上下翻滚功能,甚至也不能使用左右键进行当前命令的修改,这个实在是不爽。。。
上面的文章介绍的工具真的很强大,简单的来说,就是利用rlwrap这个工具来驱动sqlplus来实现上下翻滚以及左右键进行命令修改的功能。

如果你使用的是ubuntu,那么可以直接用apt-get来进行安装,如果你用的是redhat或者centos,那么就要进行编绎了。

rlwrap依赖于libtermcap-devel跟readline-devel,在进行安装之前,你还需要安装这两个包:

yum install -y readline-devel libtermcap-devel

然后,你就要下载rlwrap并进行编绎了:

wget "http://utopia.knoware.nl/~hlub/rlwrap/rlwrap-0.37.tar.gz"
tar -xvf rlwrap-0.37.tar.gz
cd rlwrap-0.37
./configure && make && make check && make install

之后,你运行:

rlwrap sqlplus /nolog

就会发现已经可以进行命令上下翻滚与回退修改了。

当然,为了方便,你也可以把sqlplus alias成 rlwrap,这样子你就不用每次都加rlwrap了

直接在linux中使用sqlplus客户端

首先到oracle的官方网站下载两个包:

oracle-instantclient-basic-<release>.i386.zip
oracle-instantclient-sqlplus-<release>.i386.zip

这两个其中release部分根据你的服务器端的release所决定,只跟服务器端相同或者比服务器端高,不能低于服务器端版本。
PS:下载地址:
http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html

然后,先不要急着解压。我们先建立一个目录,假设为/opt/oracle,然后我们在这里面建立一些子目录

mkdir /opt/oracle/bin
mkdir /opt/oracle/lib
mkdir /opt/oracle/tns
mkdir -p /opt/oracle/sqlplus/admin
mkdir -p /opt/oracle/sqlplus/mesg

然后,我们解压开始下载的两个包:

unzip oracle-instantclient-basic-<release>.i386.zip
unzip oracle-instantclient-sqlplus-<release>.i386.zip

解压之后,会得到一个目录,应该是instantclient_release,进入之后,对文件做如下的文件

mv sqlplus /opt/oracle/bin
mv glogin.sql /opt/oracle/sqlplus/admin
mv * /opt/oracle/lib

然后,执行如下命令(最好是写入/etc/profile或者~/.profile)

export ORACLE_HOME=/opt/oracle
export PATH=$PATH:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/tns
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

这个时候,你再执行

sqlplus /nolog

就会发现SQL*PLUS还是不能工作,会报如下这个错误:

Error 6 initializing SQL*Plus
Message file sp1<lang>.msb not found
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory

目前这个错误我没有找到真正的原因,但是也有一个临时解决方法:只要从ORACLE服务器端把sp1.msb与sp2.msb之类的的文件拷贝过来放在/opt/oracle/sqlplus/mesg中就可以了。如果你不能连接到你的ORACLE服务器去直接拷贝文件,也可以下载我的,用unzip解压,然后移动到/opt/oracle/sqlplus/mesg就可以了。

点击下载msb文件

之后,你就发现

$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jul 25 10:19:32 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL>

也就是说,SQL*PLUS可以工作了。

这个时候,你可以用easy connecting方式或者创建tnsnames.ora文件到/opt/oracle/tns中就可以了连接到你的ORACLE数据库了

PS:
有些朋友可能会碰到如下错误

SP2-1503: Unable to initialize Oracle call interface
SP2-0152: ORACLE may not be functioning properly

这个是因为你没有正确安装OCI(oracle call interface),其实就是你没有下载basic那个包,或者LD_LIBRARY_PATH设置错误。你至少要保证你的LD_LIBRARY_PATH里面存在如下四个文件:

libclntsh.so.10.1  libnnz10.so  libociei.so  libsqlplus.so