cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle in linux
cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle in linux
我正在尝试使用 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: Unable to acquire Oracle environment handle
我的问题是我是否需要在 linux 中安装任何 oracle 客户端或如何在 linux 中配置它以便我不会收到此错误。请帮忙
在 linux 中需要什么先决条件才能使用 cx_Oracle 模块
请检查您对 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)
回答第一个问题:是的,您需要在计算机上安装 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 的优势之一——在编译时不需要环境变量,在 运行 时也不需要 none!
最后一条评论:看起来您正在使用 EZ Connect 语法连接到数据库。侦听器的默认端口是 1521,而不是 1221。如果您使用默认端口,则可以简单地省略该部分(换句话说,如 Martin 所述 ipaddress/xyz)。
我正在尝试使用 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: Unable to acquire Oracle environment handle
我的问题是我是否需要在 linux 中安装任何 oracle 客户端或如何在 linux 中配置它以便我不会收到此错误。请帮忙 在 linux 中需要什么先决条件才能使用 cx_Oracle 模块
请检查您对 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)
回答第一个问题:是的,您需要在计算机上安装 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 的优势之一——在编译时不需要环境变量,在 运行 时也不需要 none!
最后一条评论:看起来您正在使用 EZ Connect 语法连接到数据库。侦听器的默认端口是 1521,而不是 1221。如果您使用默认端口,则可以简单地省略该部分(换句话说,如 Martin 所述 ipaddress/xyz)。