暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux 服务器安装Oracle instance client 客户端 rpm 包并远程连接数据库故障与解决办法【亲测有效】

原创 尚雷 2022-12-03
3590

一、前言

因为要在一台未安装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

image.png

三、连接数据库测试

使用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:

image.png

此时需要修改下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:

image.png

此时使用 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

image.png

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

最后修改时间:2022-12-04 21:13:13
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论