【大数据课堂0006】【oracle】python3/plsql 使用cx_Oracle遇到到的坑
先说一下我运到的坑:工作环境win64,数据存在Oracle数据库中,并不清楚instantclient是多少位。cx_Oracle 64,导致数据库连接不上报错,需要重新下载/安装等。下面简单总结一下我的环境部署。我之前连接过oracle18.5,现在客户是oracle11.2,需要重新安装配置。我电脑是Python37,但是cx_Oracle的版本需要Python36,那就在安装python36.
0. 时刻切记
安装配置时,必须把握一个点,就是版本一致!包括:系统版本,python版本、依赖包版本。
【笔记】
2,安装cx_Oracle https://blog.csdn.net/wangshuang1631/article/details/71057054
2.1 $uname -a //查看系统是否是 Linux x86-64
2.2 下载以下两个文件,两个文件放在同一目录下:basic和sdk。http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
instantclient-basic-linux.x64-11.2.0.3.0.zip
instantclient-sdk-linux.x64-11.2.0.3.0.zip
2.3 解压到instantclient_11_2目录下,
unzip instantclient-basic-linux.x64-11.2.0.3.0.zip
unzip instantclient-sdk-linux.x64-11.2.0.3.0.zip
2.4 设置环境变量
root用户:
# vim /etc/profile //修改
export ORACLE_HOME=/home/downloads/instantclient_11_2/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
# cat /etc/profile //查看
# source /etc/profile //使文件生效
普通用户:
修改.bashrc文件来设置环境变量。
通过指令:vi ~/.bashrc,添加如下两行内容:
ORACLE_HOME=/你的目录/instantclient_11_2/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
修改完成之后,使你的修改生效,使用指令 source ~/.bashrc
2.5 建立一个连接libclntsh.so
cd /你的目录/instantclient_11_2/
ln -s libclntsh.so.11.1 libclntsh.so
2.6 安装cx_Oracle 下载cx_Oracle-5.2.1.tar.gz
tar -xvf cx_Oracle-5.2.1.tar.gz
cd cx_Oracle-5.2.1
python setup.py install
2.7 验证 使用python指令验证:
import cx_Oracle
1. 准备
查看要连接的oracle数据库版本:执行:select * from v$version; 结果:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
比如我要连接11.2版本,之前也练过18.5版本
2. Python环境
Python3.6:cmd查看 python -V ,系统:windows64位或者32位。
注意事项:需要根据现场系统版本位数、数据库的服务端和客户端的版本位数确定。如oracle的server端是32位,则客户端instantclient需要是32位, anaconda对应win32版本。
当然,你64位的操作系统也是可以安装32位的开发环境。反之则不行!切记!
oracle客户端的版本,cx_Oracle的版本,要与Python版本和位数对应:
3 数据库
数据库版本:须要确保数据库的客户端版本不低于服务端的版本,如果连接oracle数据,可通过select * from v$version查看版本信息或者通过plsql(navicat)配置查看目录instactcliet的目录所在,确定使用的oracle客户端的版本,然后确定下载cx_Oracle的版本。
客户端及anaconda位数:与服务端保持一致,即服务端是32位,版本11g,则客户端选择11g,32位。
比如服务端版本:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 32bit Production
选择对应
Python版本:Anaconda3-5.2.0-Windows-x86,python3.6;
cx_Oracle的版本:cx_Oracle-6.2-cp36-cp36m-win32
oracle客户端的版本:instantclient-basic-win32-11.2.0.4.0;
若是: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
oracle客户端的版本:instantclient-basic-windows.x64-11.2.0.4.0.zip。下载地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
这里还需要注意:
cx_Oracle和python版本对应,都是3.6;
cx_Oracle和instantclient版本对应,都是11g
4 安装
(1) 解压instantclient-basic-windows.x64-11.2.0.4.0.zip到你的目录,比如我的是,D盘根下。
(2) 进入安装目录instantclient_11_2,修改network/admin/tnsnames.ora 文件,若没有,就新建两级文件夹 和文件tnsnames.ora 。
(3)写文件。tnsnames.ora 文件内容
cs_de_o= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.145.62)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = CSZHANG01) ) )
HOST = 192.168.145.62 --服务器ip SERVICE_NAME=CSZHANG01 --服务器的实例名 cs_de_o --给这个tns的别名吧(反正是你自己看,你能区别出来就行)
(4)配置环境变量
安装 Anaconda:首先安装Anaconda,然后安装依赖包,这里需要注意一下,有可能cx_Oracle依赖的包和做EDA分析依赖的其他包有冲突,这里建议先安装其他依赖包,最后安装cx_Oracle。
安装完毕后,须把oracle客户端instantclient中的三个文件oci.dll,oraocci11.dll和oraocei11.dll至anaconda根目录。
手动安装:把下载的文件解压,复制oci,oraocci11,oraociei11的3个DLL粘贴到你的PY目录的Lib/site-packages文件夹下面。
(2)下载plsql 工具(解压)
(3)配置环境变量
TNS_ADMIN D:\PL.SQL.Developer\instantclient_11_2\network\admin -----(instantclient_12_1的路径,我是将instantclient 解压在plsql中) NLS_LANG SIMPLIFIED CHINESE_CHINA.ZHS16GBK ----(设置语言)
(4)启动plsql,因为还没有配置好,所以你就cancel ,
进入到plsql,在上方的选项栏中 tools-->connection 设置 oracle home 路径 和 oci library 路径
然后apply,重启plsql,就会发现,database 就会显示 cs_de_o, 然后输入你的用户,密码,就可以登录了