【问题标题】:cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle in linuxcx_Oracle.InterfaceError:无法在 linux 中获取 Oracle 环境句柄
【发布时间】:2016-10-20 22:26:46
【问题描述】:

我正在尝试使用 cx_Oracle 模块连接到数据库,但出现以下错误

server_IP = ipaddress:1221/xyz
try:
    db = cx_Oracle.connect('username', 'password', server_IP)
    print db

except cx_Oracle.DatabaseError as e:
        error, = e.args
        if error.code == 1017:
            print('Please check your credentials.')
        else:
            print('Database connection error: %s'.format(e))
        raise

cx_Oracle.InterfaceError: 无法获取 Oracle 环境句柄

我的问题是我需要在 linux 中安装任何 oracle 客户端或如何在 linux 中配置它,这样我就不会收到此错误。请帮忙 在linux中使用cx_Oracle模块需要哪些前置条件

【问题讨论】:

    标签: python oracle cx-oracle


    【解决方案1】:

    请检查您对cx_Oracle.connect 的调用的语法。它需要用户名、密码和 DSN 或一个包含所有内容的参数。

    例如

    con = cx_Oracle.connect('username/password@ipaddress/xyz')
    

    或构建一个完整的 DSN:

    ip = 'ipaddress'
    port = 1221
    SID = 'xyz'
    dsn_tns = cx_Oracle.makedsn(ip, port, SID)
    db = cx_Oracle.connect('username', 'password', dsn_tns)
    

    Using Python With Oracle

    【讨论】:

    • 相同的代码在 Windows 中运行良好,因为安装了 oracle 客户端
    • 您的 Windows 客户端可能通过解析其 TNSNAMES 中的数据库名称来处理事情。尽管 TNSNAMES 只包含一个 IP 地址来引用数据库,这仍然让我感到惊讶。这不是常见的做法。
    • 我仍然遇到同样的错误。我在linux中缺少任何配置吗?我正在尝试远程访问机器并执行数据库命令。
    【解决方案2】:

    回答第一个问题:是的,您需要在计算机上安装 Oracle 客户端才能使用 cx_Oracle。您可以安装完整的客户端,但使用即时客户端要容易得多。如果您使用的是基于 RPM 的 Linux 发行版,则可以使用 RPM 大大简化事情。立即访问此处:

    http://www.oracle.com/technetwork/database/features/instant-client/index.html

    不过,您收到的错误表明存在配置问题。确保您使用的 Oracle 客户端和您使用的 cx_Oracle 版本相互兼容。换句话说,如果 Python 是 64 位的,那么您的 Oracle 客户端也应该是 64 位的。如果 Python 是 32 位的,那么您的 Oracle 客户端应该是 32 位的。检查环境变量 ORACLE_HOME(如果使用完整的 Oracle 客户端)、PATH 和 LD_LIBRARY_PATH。这是使用即时客户端 RPM 的优势之一——编译时不需要环境变量,运行时也不需要!

    最后一条评论:看起来您正在使用 EZ Connect 语法连接到数据库。侦听器的默认端口是 1521,而不是 1221。如果您使用默认端口,您可以简单地省略该部分(即 Martin 指出的 ipaddress/xyz)。

    【讨论】:

      猜你喜欢
      • 2017-08-17
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      相关资源
      最近更新 更多