环境:
os:debian9
pyenv:python3.6.5
django 2.0
oracle Client 12.2
oracle server 10.2
cx_Oracle 6.2
本来以为oracle的客户端必须和服务器端版本一致,这是个大坑
再次,我是下载zip版本的客户端安装的,配置的比较多,我少配了几处。还有,cx_Oracle 提示只支持oracle client 11.2以上版本。网上搜索出来的都是让降cx_Oracle 的版本,试着pip装3.5版本,但是各种报错不支持,都是坑,所以直接升级客户端就是了
https://oracle.github.io/odpi/doc/installation.html#linux
https://blog.csdn.net/andy_wcl/article/details/79470705
上面两个是安装oracle 客户端的安装说明,对我帮助比较大,感谢作者
先新建个目录,好将软件包下载并解压缩到应用程序可访问的单个目录中。
mkdir -p /opt/oracle #新建一个安装的文件夹
cd /opt/oracle #切换到文件夹
oracle客户端官网下载地址,选择相应的版本下载
http://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html
我一共下了三个文件basic,sql,CDK,官网注册个账号下载就好
我是直接复制链接,用wget下载的
unzip instantclient-basic-linux.x64-12.2.0.1.0.zip #解压下载到客户端文件
全部解压到同一个文件夹就好,解压的时候会自动创建instantclient_12_2目录,然后
sudo mkdir -p /opt/oracle/instantclient_12_2/network/admin #新建admin文件夹
cd /opt/oracle/instantclient_12_2/network/admin
sudo nano tnsnames.ora
在上述目录新建tnsnames.ora文件,并编辑数据库链接信息,内容如下
oracle =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.197.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID =xxx)
)
)
说是要装 libaio1 包
sudo apt-get install libaio1
如果计算机上没有其他受影响的Oracle软件,将Instant Client永久添加到运行时链接路径。
sudo sh -c "echo /opt/oracle/instantclient_12_2 > etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig
接着配置环境变量
sudo nano ~/.zshrc
我装了zsh,默认为.bash_profile
在文档结尾添加下面内容
export ORACLE_HOME=/opt/oracle/instantclient_12_2
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export LD_LIBRARY_PATH=$ORACLE_HOME
export PATH=$ORACLE_HOME:$PATH
然后运行
source ~/.zshrc #使配置生效
sqlplus username/password@oracle #测试连接是否成功‘oracle’与之前配置的tnsnames.ora中的相同就可以
然后进ipython测试(没有的pip安装,很好用)
ipython
import os
import cx_Oracle
conn_str = u"用户名/密码@ip:端口/数据库名"
cx_Oracle.connect(conn_str)