我正在尝试将Python3.5(Mac OS X El Capitan)连接到Oracle集群(远程)。
首先我安装了适用于x64的Instant Client(http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html) 然后我安装cx_Oracle(https://pypi.python.org/pypi/cx_Oracle/5.2.1)
对于安装cx_Oracle我设置:
export ORACLE_HOME=/Applications/oracle/instantclient_11_2
export LD_LIBRARY_PATH=$ORACLE_HOME
export DYLD_LIBRARY_PATH=$ORACLE_HOME
export PATH=$ORACLE_HOME:$PATH
现在我收到错误:
**Unable to acquire Oracle environment handle**
我不知道为什么会这样。有什么想法吗?
我甚至创建了文件 tnsnames.ora 并将其添加到/Applications/oracle/instantclient_11_2/network/admin/tnsnames.ora
orcl=
(description=
(address_list=
(address = (protocol = TCP)(host = xxx.xxx.xxx.xxx)(port = 1521))
)
(connect_data =
(service_name=oratst)
)
)
我的python代码:
import traceback
import os
os.environ["ORACLE_HOME"] = "/Applications/oracle/instantclient_11_2"
os.environ["LD_LIBRARY_PATH"] = "/Applications/oracle/instantclient_11_2"
os.environ["DYLD_LIBRARY_PATH"] = "/Applications/oracle/instantclient_11_2"
os.environ["LD_LIBRARY_PATH"] = "/Applications/oracle/instantclient_11_2"
import cx_Oracle
try:
connection = cx_Oracle.Connection('user', 'password', cx_Oracle.makedsn('remote_ip', 1521, 'sid'))
except Exception as e:
print(type(e))
print(e)
traceback.print_tb(e.__traceback__)
P.S。 cx_Oracle - 非常奇怪的模块。 它试图访问libs:
/ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1
/ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib
我从来没有这条路径,但我创建了符号链接。
答案 0 :(得分:1)
按照Instant Client的实际安装说明进行操作:http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html#ic_osx_inst 并在〜/ lib中为Oracle库创建sym链接:
ln -s libclntsh.dylib.11.1 libclntsh.dylib
mkdir ~/lib
ln -s /wherever/instantclient_11_2/{libclntsh.dylib.11.1,libnnz11.dylib,libociei.dylib} ~/lib/
El Capitan打破了DYLD_LIBRARY_PATH,所以没有必要设置它:(并且没有必要设置Linux LD_LIBRARY_PATH变量。
如果要集中安装Instant Client,请参阅https://github.com/oracle/node-oracledb/blob/master/INSTALL.md#instosx
中的5.3.1如果您创建了tnsnames.ora文件,请将TNS_ADMIN设置为它所在的目录。不要在运行时使用Instant Client设置ORACLE_HOME(尽管您可能需要在cx_Oracle安装期间临时设置它。将其设置为您解压缩的目录Instant Client basic& sdk into,例如/ Applications / oracle / instantclient_11_2)