cx_Oracle 连接 python3.5

cx_Oracle connection by python3.5

我尝试了几次连接 Oracle 数据库的尝试,但仍然无法连接。以下是我的连接代码。但是,我可以像这样通过终端连接 Oracle DB:
$ sqlplus64 uid/passwd@192.168.0.5:1521/WSVC

我希望分享您与此问题相关的知识和经验。谢谢你。

import os
os.chdir("/usr/lib/oracle/12.2/client64/lib")
import cx_Oracle  

# 1st attempt      
ip = '192.168.0.5'
port = 1521
SID = 'WSVC'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)
# dsn_tns = cx_Oracle.makedsn(ip, port, service_name=SID) 

db = cx_Oracle.connect('uid', 'passwd', dsn_tns)
cursor = db.cursor()

------------------------------------------------- 
# 2nd attempt  
conn = "uid/passwd@(DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.5)(PORT=1521)))(CONNECT_DATA=(SID=WSVC)(SRVR=DEDICATED)))"

db = cx_Oracle.connect(conn)
cursor = db.cursor()

------------------------------------------------------ 
# ERROR Description 

cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle 

错误"unable to acquire Oracle environment handle"是因为您的Oracle配置不正确。一些应该可以帮助您发现问题根源的事情:

  • 使用 Instant Client 时,不要设置环境变量 ORACLE_HOME;只应在使用完整的 Oracle 客户端或 Oracle 数据库安装时设置
  • LD_LIBRARY_PATH的值应该包含包含libclntsh.so的路径;您选择的值看起来不正确,应该是 /usr/lib/oracle/12.2/client64/lib 而不是
  • 您可以使用 ldd 命令验证正在加载哪些 Oracle 客户端库,如 ldd cx_Oracle.cpython-35m-x86_64-linux-gnu.so