linux环境下,利用python操作远程oracle时候,使用cx_Oracle连接显示报错
原因是在linux环境下没有安装相应的Oracle Client
解决方案:
1.查询远程Oracle的版本以及位数
我所用的是64位11g的客户端,版本号是11.2.0.1
2.在oracle官网上下载对应版本:
oracle官网地址:Oracle Instant Client Downloads
选择自己所需要的版本
3.上传解压配置
我所选择的是instantclient-basic-linux.x64-11.2.0.4.0.zip,在linux上选择好自己的路径,将压缩包上传,利用unzip xxx.ZIP实现解压
在解压后的文件夹中新建文件network,并在network下新建admin文件
mkdir -p network/admin
在admin文件下新建tnsnames.ora文件,并添加如下内容:
REACH=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = )
(PORT =)
)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
HOST填写远程Oracle的IP,PORT填写端口号
保存退出
4.配置环境变量
打开配置文件
vim ~/.bash_profile
按照自己放置oracle Client文件位置配置如下内容
export ORACLE_HOME=/opt/orcl/instantclient_11_2
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
保存并退出
刷新文件,使变量生效
source ~/.bash_profile
重新连接,即可
其他错误
利用python重新连接后依旧报错
cx_Oracle.DatabaseError: ORA-12705: 无法访问 NLS 数据文件, 或者指定的环境无效
该问题原因是本地注册表中的值可能是NA或者是其与Oracle客户端NLS_LANG值不一致的情况导致的
解决方法:
1.首先查询Oracle端NLS值
SELECT USERENV('language') FEOM DUAL
确定返回值后,在环境变量中设置NLS变量
vim ~/.bash_profile
添加如下代码
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
'AMERICAN_AMERICA.AL32UTF8'要换成自己查询出的结果
刷新使环境生效
source ~/.bash_profile
重现尝试,连接成功!