如何修复:cx_Oracle.DatabaseError:DPI-1047:找不到 64 位 Oracle 客户端库 - Python

新手上路,请多包涵

我正在使用 cx_oracle 7 和 python 3.6.7 建立到远程服务器中的 oracle 11g 的连接。我在 Ubuntu 18.04 中的操作系统

我已经使用 libclntsh.so 安装了 oracle 即时客户端库,但没有得到预期的输出。

这是我用来连接到 oracle 数据库的代码

connection = cx_Oracle.connect("username/password@host/port")
print (connection.version)
connection.close()

当脚本运行时,我希望获得连接版本而不是我收到以下错误消息

文件“script.py”,第 13 行,在 connection = cx_Oracle.connect(“username/password@host/port”) cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: “libclntsh.so:无法打开共享对象文件:没有这样的文件或目录”。请参阅 https://oracle.github.io/odpi/doc/installation.html#linux 寻求帮助

原文由 Ian Nato 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

经过更多研究后,我从 Ubuntu 社区 获得了解决方案,在安装 oracle instant-client 之后,您必须按如下方式集成 oracle 库:

导出 LD_LIBRARY_PATH=/usr/lib/oracle/ <version> /client(64)/lib/\({LD_LIBRARY_PATH:+:\)LD_LIBRARY_PATH}

Linux x86_64 的 12.1 版本的示例可以是:

导出 LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/\({LD_LIBRARY_PATH:+:\)LD_LIBRARY_PATH}

其中 <version> 表示您的 oracle 即时客户端的版本,例如 11.2、12.2

连接参数应该如下

connection = cx_Oracle.connect("username/password@host/service_name e.g orcl")

要获取侦听器/服务名称,请在 oracle sqlplus 中键入以下内容

SQL> show parameter local_listener

VALUE 下的文字是您的侦听器/服务名称。

原文由 Ian Nato 发布,翻译遵循 CC BY-SA 4.0 许可协议

我面临着完全相同的问题。这对我有用:

  • 首先,我下载了 Oracle Basic zip 文件。就我而言,我得到的是 64 位版本。
  • 之后,我将其解压缩到一个 opt 目录中。我不得不在我的系统中使用 sudo
     $ sudo mkdir -p /opt/oracle

    $ cd /opt/oracle

    $ sudo unzip /opt/oracle/instantclient-basic-linux.x64-19.8.0.0.0dbru.zip

  • 然后我安装了 libaio1 。请注意,我正在使用 Ubuntu
     $ sudo apt-get install libaio1

  • 最后,我添加了外部变量的路径 LD_LIBRARY_PATH
     $ vim ~/.bashrc

  • 并将此行添加到 .bashrc 文件
    export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_8:$LD_LIBRARY_PATH

  • 保存 .bashrc 文件后,我获取了它:
     $ source ~/.bashrc

然后我的 Python 脚本再次运行良好。

另请参阅 cx_oracle 文档

原文由 Michel Mesquita 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进