操作系统:ubuntu 20.04.6 LTS
oracle版本:oracle 12c
原因:因为数据库是本地docker搭建,而系统中没有oracle客户端导致无法连接oracle数据库 sqlplus(同样适用于所有本地没有oracle客户端导致无法连接oracle数据库的情况);为了使用python调用cx_oracle模块,必须要装这个客户端。
方案参考:Ubuntu下安装oracle客户端_51CTO博客_linux安装oracle客户端
具体实施方案:
1)下载oracle客户端,这里推荐本地下载zip后将解压文件传到服务器上
找到自己服务端的版本(一般来说的话,高版本兼容低版本,但我没尝试过)
oracle基础环境有两款,basic和basiclite,完整版和轻量级,我这里用了完整版
除此之外,这里的软件很明显装的有些多,我认为装个basic就够了吧?
a. instantclient-basic-linux.x64-xxx.zip
b. instantclient-jdbc-linux.x64-xxx.zip
c . instantclient-sdk-linux.x64-xxx.zip
d. instantclient-sqlplus-linux.x64-xxx.zip
2)
注:关于目录12c就是个版本号,自己随便设置也没问题,但要保持后续路径同步更改
创建目录和解压到目录:
mkdir -p /usr/lib/oracle/12c/client64/lib
mkdir -p /usr/lib/oracle/12c/client64/sdk
mkdir -p /usr/lib/oracle/12c/client64/network/admin
a=> /usr/lib/oracle/12c/client64/lib
b=> /usr/lib/oracle/12c/client64/lib
c=> /usr/lib/oracle/12c/client64/sdk
d=>/usr/lib/oracle/12c/client64/lib
创建目录和文件连接:
cd /usr/lib/oracle/12c/client64/lib
ln -s libclntsh.so.xxx libclntsh.so
ln -s libocci.so.xxx libocci.so
chmod 755 ./*.so
3) tnsnames.ora
vi /usr/lib/oracle/12c/client64/network/admin/tnsnames.ora
内容如下:
ORADBSID =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle服务ip)(PORT = oracle服务端口))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oracle服务server_name)
)
)
4) 配置 /etc/profile
增加下面内容:
export ORACLE_HOME=/usr/lib/oracle/12c/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/lib:$ORACLE_HOME/sdk/include
export ORACLE_SID=ORADBSID
export NLS_LANG="american_america.ZHS16GBK"
使生效:
. /etc/profile
5) 打开sqlplus并进入oracle客户端
sqlplus user/password@ORADBSID
如果用到sys用户:sqlplus sys/password@ORADBSID as sysdba
连接其他oracle数据库: sqlplus system/password@host:port/ORCL