cx_Oracle.Database Error:DPI-1047;ORA-12705:

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

重现尝试,连接成功!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值