当前位置首页 > Fedora知识

fedora12下安装oracle11客户端

阅读次数:178 次  来源:admin  发布时间:

How to install oracle-client(v11) in fedora12

joeblackzqq@163.com 2011-3-21

目标:将oracle-client(v11)安装到”/opt/oracle/”下

准备好如下三个安装包,放在某个目录下,如:/root/software/oracle

[root@localhost oracle]# pwd

/root/software/oracle

[root@localhost oracle]# l

oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm

oracle-instantclient11.2-devel-11.2.0.2.0.i386.rpm // 这个是SDK开发包

oracle-instantclient11.2-sqlplus-11.2.0.2.0.i386.rpm

[root@localhost oracle]#

创建目标文件夹(oracle将安装在/opt/下)

[root@localhost opt]# mkdir oracle

[root@localhost opt]# mkdir oracle/network oracle/sdk

[root@localhost opt]# mkdir oracle/network/admi

解压其中2个rpm包(basic, sqlplus)

[root@localhost ~]# cd /root/software/oracle

[root@localhost oracle]# pwd

/root/software/oracle

[root@localhost oracle]# l

oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm

oracle-instantclient11.2-devel-11.2.0.2.0.i386.rpm

oracle-instantclient11.2-sqlplus-11.2.0.2.0.i386.rpm

[root@localhost oracle]# rpm2cpio oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm | cpio -div

./usr/lib/oracle/11.2/client/bin/adrci

./usr/lib/oracle/11.2/client/bin/genezi

./usr/lib/oracle/11.2/client/lib/libclntsh.so.11.1

./usr/lib/oracle/11.2/client/lib/libnnz11.so

./usr/lib/oracle/11.2/client/lib/libocci.so.11.1

./usr/lib/oracle/11.2/client/lib/libociei.so

./usr/lib/oracle/11.2/client/lib/libocijdbc11.so

./usr/lib/oracle/11.2/client/lib/ojdbc5.jar

./usr/lib/oracle/11.2/client/lib/ojdbc6.jar

./usr/lib/oracle/11.2/client/lib/xstreams.jar

336597 块

[root@localhost oracle]# rpm2cpio oracle-instantclient11.2-sqlplus-11.2.0.2.0.i386.rpm | cpio -div

./usr/bin/sqlplu

./usr/lib/oracle/11.2/client/bin/sqlplu

./usr/lib/oracle/11.2/client/lib/glogin.sql

./usr/lib/oracle/11.2/client/lib/libsqlplus.so

./usr/lib/oracle/11.2/client/lib/libsqlplusic.so

5321 块

[root@localhost oracle]# l

oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm

oracle-instantclient11.2-devel-11.2.0.2.0.i386.rpm

oracle-instantclient11.2-sqlplus-11.2.0.2.0.i386.rpm

usr

将解压出来的usr目录下的bin和lib移动到/opt/oracle/下,再删除usr目录:

[root@localhost oracle]# mv usr/lib/oracle/11.2/client/bin /opt/oracle/

[root@localhost oracle]# mv usr/lib/oracle/11.2/client/lib /opt/oracle/

[root@localhost oracle]# rm -rf usr

解压剩下的rpm包(devel)

[root@localhost oracle]# rpm2cpio oracle-instantclient11.2-devel-11.2.0.2.0.i386.rpm | cpio -div

./usr/include/oracle/11.2/client/ldap.h

./usr/include/oracle/11.2/client/nzerror.h

./usr/include/oracle/11.2/client/nzt.h

./usr/include/oracle/11.2/client/occi.h

./usr/include/oracle/11.2/client/occiAQ.h

./usr/include/oracle/11.2/client/occiCommon.h

./usr/include/oracle/11.2/client/occiControl.h

./usr/include/oracle/11.2/client/occiData.h

./usr/include/oracle/11.2/client/occiObjects.h

./usr/include/oracle/11.2/client/oci.h

./usr/include/oracle/11.2/client/oci1.h

./usr/include/oracle/11.2/client/oci8dp.h

./usr/include/oracle/11.2/client/ociap.h

./usr/include/oracle/11.2/client/ociapr.h

./usr/include/oracle/11.2/client/ocidef.h

./usr/include/oracle/11.2/client/ocidem.h

./usr/include/oracle/11.2/client/ocidfn.h

./usr/include/oracle/11.2/client/ociextp.h

./usr/include/oracle/11.2/client/ocikpr.h

./usr/include/oracle/11.2/client/ocixmldb.h

./usr/include/oracle/11.2/client/ocixstream.h

./usr/include/oracle/11.2/client/odci.h

./usr/include/oracle/11.2/client/oratypes.h

./usr/include/oracle/11.2/client/ori.h

./usr/include/oracle/11.2/client/orid.h

./usr/include/oracle/11.2/client/orl.h

./usr/include/oracle/11.2/client/oro.h

./usr/include/oracle/11.2/client/ort.h

./usr/include/oracle/11.2/client/xa.h

./usr/lib/oracle/11.2/client/lib/libclntsh.so

./usr/lib/oracle/11.2/client/lib/libocci.so

./usr/lib/oracle/11.2/client/lib/ottclasses.zi

./usr/share/oracle/11.2/client/cdemo81.c

./usr/share/oracle/11.2/client/demo.mk

./usr/share/oracle/11.2/client/occidemo.sql

./usr/share/oracle/11.2/client/occidemod.sql

./usr/share/oracle/11.2/client/occidml.c

./usr/share/oracle/11.2/client/occiobj.c

./usr/share/oracle/11.2/client/occiobj.ty

./usr/share/oracle/11.2/client/ott

3833 块

[root@localhost oracle]#

将上面解压后的usr目录下所有文件移动到/opt/oracel/sdk下,删除无用的目录usr

[root@localhost oracle]# mv usr/* /opt/oracle/sdk/

[root@localhost oracle]# rm -rf usr

至此,oracle11的客户端安装完成,接下来进行配置

7.1 添加环境变量,在文件/etc/profile末尾添加如下两行:

export ORACLE_HOME=/opt/oracle

export LD_LIBRARY_PATH=/opt/oracle/li

7.2 启用刚才的设置

[root@localhost oracle]# source /etc/profile

通过echo $ORACLE_HOME可以查看刚才添加的环境变量是否已启用,如:

[root@localhost oracle]# echo $ORACLE_HOME

/opt/oracle

可见,已经启用成功!

配置监听器和网络

因为本地没有安装oracle数据库,所以需要从安装oracle数据库的目录弄三个文件过来,分别是:listener.ora sqlnet.ora tnsnames.ora ,放到/opt/oracle/network/admin下

修改文件tnsnames.ora如下:

# tnsnames.ora Network Configuration File: D:\DB\Oracle10g\network\admin\tnsnames.ora

# Generated by Oracle configuration tools.

ORCL =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = Loveme)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

)

(CONNECT_DATA =

(SID = PLSExtProc)

(PRESENTATION = RO)

)

)

yuan =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.103)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

10. 修改listener.ora:

# listener.ora Network Configuration File: D:\DB\Oracle10g\network\admin\listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /opt/oracle)

// 对应$ORACLE_HOME

(PROGRAM = extproc)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.103)(PORT = 1521))

)

)

11. 所有配置完成,接着测试是否可连接上远程的oracle数据库

[root@localhost bin]# cd ~

[root@localhost ~]# cd /opt/oracle/bi

[root@localhost bin]# l

adrci genezi sqlplu

[root@localhost bin]# sqlplu

ash: sqlplus: command not found // 这表示找不到sqlplus命令,还需要配置

事实上,ORACLE_HOME等都已经配置好了,但为什么还不行呢?记得windows系统下的环境变量path吗,只有这些目录下的可执行文件是可以直接在cmd窗口下运行的。所以我们先来看下当前系统下path变量的值吧:

[root@localhost bin]# echo $PATH

/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bi

可见,“/opt/oracle/bin”并不在$PATH下,所以sqlplus命令无法直接运行。因此,只要将“/opt/oracle/bin”加进$PATH下就可以了(未尝试)。但是,我采用了如下的办法来解决:

#ln -s /opt/oracle/bin/sqlplus /usr/bin // 建立sqlplus文件的软连接到/usr/bin下

这样,sqlplus命令就可以直接在终端执行了。

但是仔细一运行,发现还是有错误:

./sqlplus: error while loading shared libraries: libnnz11.so: cannot enable executable stack as shared object requires: Permission denied

网上搜索了下,找到如下的答案(来源:http://seven.blog.51cto.com/120537/60173)

[oracle@linux5 bin]$ sqlplus /nolog

qlplus: error while loading shared libraries: /u01/oracle/lib/libnnz11.so: cannot restore segment prot after reloc: Permission denied


Linux下执行程序时发生错误: cannot restore segment prot after reloc: Permission denied

原来这是SELinux搞的鬼,解决办法有两个

1. 使用chcon 命令

示例: chcon -t texrel_shlib_t /usr/local/rsi/idl_6.1/bin/bin.linux.x86/*.so

2. 禁止掉SELinux

更改/etc/sysconfig/selinux 文件的内容为 SELINUX=disabled

于是,修改文件/etc/sysconfig/selinux,将SELINUX改为disabled.

再次运行sqlplus,发现结果还是一样,还是一样的错误。这时,我看到SELinux仍然在运行着,想想可能还是它的错,既然不知道怎么关闭,就重启吧。重启后,果真可以成功登录远程oracle数据库了:

[root@localhost ~]# sqlplus scott/scott@yua

SQL*Plus: Release 11.2.0.2.0 Production on Sun Mar 20 23:02:44 2011

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

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Productio

With the Partitioning, OLAP and Data Mining optio

SQL> select sysdate from dual

SYSDATE

---------

20-MAR-11

SQL>

哈哈,把SELinux关闭后,发现我的网络再也不会经常掉线了,而且QQ也可以成功登录了!原来这一切都是SELinux搞的鬼。难怪我虚拟机下的QQ就可以一直正常登录,也不掉线,因为那里的SELinux默认是没有启动的。


上一篇:Fedora14nfs配置+tiny210挂载nfs
下一篇:LinuxDebian8tomcat安装启动