一、前言
因为要在一台未安装Oracle数据库的Centos 服务器上进行测试迁移Oracle到国产数据库,需在该安装了国产数据库服务器上安装Oracle的客户端,现将整个安装过程及遇到的问题和解决办法记录如下。
环境说明
客户端服务器为Centos 7 操作系统,Oracle 数据库为11.2.0.4 企业版,Oracle 数据库服务器为Centos 6.8 操作系统。
二、安装过程
为方便,本次选择使用rpm包来安装Oracle instance client。
2.1 下载 Oracle instance client rpm 包
登陆 Oracle 官网 https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html 选择下载所需要的的 Oracle instance client rpm 包,本次依次下载如下四个rpm包。
[root@mogdb-db1 soft]# ls -lrt oracle-instantclient11.2-*.rpm
-rw-r--r-- 1 omm omm 828333 Dec 2 14:31 oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
-rw-r--r-- 1 omm omm 59865008 Dec 2 14:36 oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
-rw-r--r-- 1 omm omm 610222 Dec 2 14:37 oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
-rw-r--r-- 1 root root 1564169 Dec 2 17:39 oracle-instantclient11.2-jdbc-11.2.0.4.0-1.x86_64.rpm
2.2 安装Oracle instance client rpm 包
-- 使用如下方式安装如下四个rpm包
[root@mogdb-db1 soft]# rpm -ivh oracle-instantclient11.2-*.rpm
Preparing... ################################# [100%]
Updating / installing...
1:oracle-instantclient11.2-basic-11################################# [ 25%]
2:oracle-instantclient11.2-devel-11################################# [ 50%]
3:oracle-instantclient11.2-jdbc-11.################################# [ 75%]
4:oracle-instantclient11.2-sqlplus-################################# [100%]
oracle-instantclient11.2-*.rpm 会安装在/var/lib/oracle目录下,该目录下层级结构如下:
[root@mogdb-db1 ~]# cd /usr/lib
[root@mogdb-db1 lib]# tree -f ./oracle
./oracle
└── ./oracle/11.2
└── ./oracle/11.2/client64
├── ./oracle/11.2/client64/bin
│ ├── ./oracle/11.2/client64/bin/adrci
│ ├── ./oracle/11.2/client64/bin/genezi
│ └── ./oracle/11.2/client64/bin/sqlplus
└── ./oracle/11.2/client64/lib
├── ./oracle/11.2/client64/lib/glogin.sql
├── ./oracle/11.2/client64/lib/libclntsh.so -> libclntsh.so.11.1
├── ./oracle/11.2/client64/lib/libclntsh.so.11.1
├── ./oracle/11.2/client64/lib/libheteroxa11.so
├── ./oracle/11.2/client64/lib/libnnz11.so
├── ./oracle/11.2/client64/lib/libocci.so -> libocci.so.11.1
├── ./oracle/11.2/client64/lib/libocci.so.11.1
├── ./oracle/11.2/client64/lib/libociei.so
├── ./oracle/11.2/client64/lib/libocijdbc11.so
├── ./oracle/11.2/client64/lib/libsqlplusic.so
├── ./oracle/11.2/client64/lib/libsqlplus.so
├── ./oracle/11.2/client64/lib/ojdbc5.jar
├── ./oracle/11.2/client64/lib/ojdbc6.jar
├── ./oracle/11.2/client64/lib/orai18n.jar
├── ./oracle/11.2/client64/lib/orai18n-mapping.jar
├── ./oracle/11.2/client64/lib/ottclasses.zip
└── ./oracle/11.2/client64/lib/xstreams.jar
4 directories, 20 files

三、连接数据库测试
使用root用户在/usr/lib/oracle/11.2/client64下依次创建network/admin目录,并在network/admin目录下创建tnsnames.ora文件,编辑tnsnames.ora文件,配置Oracle数据库连接串信息。
[root@mogdb-db1 ~]# cd /usr/lib/oracle/11.2/client64
[root@mogdb-db1 client64]# mkdir -pv network/admin
mkdir: created directory ‘network’
mkdir: created directory ‘network/admin’
[root@mogdb-db1 client64]# cd network/admin
[root@mogdb-db1 admin]# touch tnsnames.ora
[root@mogdb-db1 admin]# cat >> tnsnames.ora <<EOF
> oracle11g =
> (DESCRIPTION =
> (ADDRESS = (PROTOCOL = TCP)(HOST = 10.110.8.18)(PORT = 1521))
> (CONNECT_DATA =
> (SERVER = DEDICATED)
> (SERVICE_NAME = abiz)
> )
> )
> EOF
如果希望在普通用户下使用sqlplus来连接远程Oracle数据库,需在普通用户.bash_profile配置LD_LIBRARY_PATH环境变量。
[root@mogdb-db1 ~]# su - omm
cat >> ~/.bash_profile <<EOF
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
EOF
source ~/.bash_profile
此时发现无法使用sqlpus
[omm@mogdb-db1 ~]$ sqlplus
-bash: sqlplus: command not found
-- 此时会发现无法使用sqlplus命令,但可以使用sqlpus64命令
[omm@mogdb-db1 ~]$ sqlplus64
SQL*Plus: Release 11.2.0.4.0 Production on Sat Dec 3 21:16:43 2022
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Enter user-name:

此时需要修改下sqlplus的软连接
[omm@mogdb-db1 ~]$ su - root
Password:
Last login: Sat Dec 3 20:58:26 CST 2022 from 192.168.5.217 on pts/1
[root@mogdb-db1 ~]# ls -lrt /bin/sqlplus64
lrwxrwxrwx 1 root root 41 Dec 3 20:52 /bin/sqlplus64 -> /usr/lib/oracle/11.2/client64/bin/sqlplus
[root@mogdb-db1 ~]# ln -s /usr/lib/oracle/11.2/client64/bin/sqlplus /bin/sqlplus
[root@mogdb-db1 ~]# ls -lrt /bin/sqlplus
lrwxrwxrwx 1 root root 41 Dec 3 21:20 /bin/sqlplus -> /usr/lib/oracle/11.2/client64/bin/sqlplus
[root@mogdb-db1 ~]#
[root@mogdb-db1 ~]# sqlplus
sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory
[root@mogdb-db1 ~]# su - omm
Last login: Sat Dec 3 21:19:59 CST 2022 on pts/1
[omm@mogdb-db1 ~]$ sqlplus
SQL*Plus: Release 11.2.0.4.0 Production on Sat Dec 3 21:21:18 2022
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Enter user-name:

此时使用 sqlplus 连接 tnsnames.ora 连接串时会报如下错误:
[omm@mogdb-db1 ~]$ sqlplus system/oracle@oracle11g
SQL*Plus: Release 11.2.0.4.0 Production on Sat Dec 3 21:24:00 2022
Copyright (c) 1982, 2013, Oracle. All rights reserved.
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Enter user-name:
报错的原因是因为未配置tns_admin环境变量导致的,此时需要在普通用户.bash_profile里添加tns_admin环境变量。
[root@mogdb-db1 ~]# su - omm
Last login: Sat Dec 3 21:21:15 CST 2022 on pts/1
[omm@mogdb-db1 ~]$ cat >> ~/.bash_profile <<EOF
> export TNS_ADMIN=/usr/lib/oracle/11.2/client64/network/admin
> EOF
[omm@mogdb-db1 ~]$ source ~/.bash_profile
[omm@mogdb-db1 ~]$ sqlplus system/oracle@oracle11g
SQL*Plus: Release 11.2.0.4.0 Production on Sat Dec 3 21:42:15 2022
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SQL> select status from v$instance;
STATUS
------------
OPEN

此时可以正常通过客户端来远程连接Oracle数据库了。




