解决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

“Error in invoking target ‘client_sharedlib’ of makefile ‘/home/oracle/oracle/product/10.2.0/db_1/network/lib/ins_net_client.mk’

今天同事在安装oracle的时候总是报这个错误:

"Error in invoking target 'client_sharedlib' of makefile '/home/oracle/oracle/product/10.2.0/db_1/network/lib/ins_net_client.mk'.

我帮忙查了好久,一直都没发现是什么问题,最后不得不放狗,得到提示,查看ORACLE_HOME下面的install/make.log,在的最后,发现了这样的信息:

/usr/bin/make -f ins_net_client.mk client_sharedlib ORACLE_HOME=/home/oracle/oracle/product/10.2.0/db_1//home/oracle/oracle/product/10.2.0/db_1/bin/genclntsh
/home/oracle/oracle/product/10.2.0/db_1/rdbms/lib/kpudfo.o: file not recognized: File format not recognized
collect2: ld returned 1 exit status
genclntsh: Failed to link libclntsh.so.10.1
make: *** [client_sharedlib] Error

然后在这里找到有人提出可能的原因:把32位的oracle装64位的操作系统,或者是把64位oracle装32位的系统。

最后问清楚,这个家伙果然是把64位的oracle想装在32位的系统上了。。。
换回32位系统,一切正常

CentOS 5.1下安装oracle11g

同事不知道为什么,最近对oracle产生了兴趣,非得要我帮他装一个。
我以前也没有装过那东西,所以正好试试。
呵呵,反正打算以后也转到oracle,也好提前试下。
在传说当中,oracle 的安装是非常麻烦的。
还好他有官方文档,按照官方文档一步一步来。

操作系统:CentOS 5.1
内核版本:2.6.18-53.1.13.el5
oracle版本: 11g Release 1 (11.1) for Linux X86-64
参考文档:Database Quick Installation Guide


一,硬件要求:

内存:至少1G的物理内存。官方的建议是如果低于1G内存,则须要添加内存。

SWAP分区:

物理内存 swap大小
1024MB-2048MB 物理内存的1.5倍
2049MB-8192MB 与物理内存相等
大于8192MB 物理内存的0.75倍

Read More »