You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python oracledb连接Oracle数据库遇ORA-28759等错误求助

解决oracledb连接Oracle时的ORA-28759与DPY-6000错误

针对ORA-28759: failure to open file的排查与修复

  • 检查钱包配置与路径
    ORA-28759通常和Oracle Wallet文件的访问或路径配置有关,即使确认有读写权限,也需要:

    1. 确认tnsnames.ora中的WALLET_LOCATION参数指向的目录包含cwallet.sso和ewallet.p12文件,路径不能有拼写错误或特殊字符。
    2. 在代码中显式指定TNS_ADMIN和配置目录,确保oracledb能找到钱包和tns配置:
      import os
      import oracledb
      
      # 设置TNS_ADMIN指向包含tnsnames.ora和钱包的目录
      os.environ['TNS_ADMIN'] = r"C:\your\wallet_and_tns_directory"
      # 初始化客户端时指定lib_dir和config_dir
      oracledb.init_oracle_client(
          lib_dir=r"C:\oracle\instantclient_18_5",
          config_dir=r"C:\your\wallet_and_tns_directory"
      )
      
      dbadw = """###fromtnsnames"""
      connx = oracledb.connect(
          user='my_user', 
          password='my_password', 
          dsn=dbadw, 
          encoding="UTF-8"
      )
      c = connx.cursor()
      
  • 验证Instant Client版本兼容性
    确保你使用的18.5版本Instant Client与目标Oracle数据库版本兼容:

    • Oracle官方要求Instant Client版本不低于数据库版本,或支持向下兼容(例如18c客户端可连接19c数据库,但21c数据库建议用21c或更高版本的客户端)。
    • 若版本不匹配,下载对应版本的Instant Client(无需管理员权限,解压到本地目录即可),替换lib_dir路径。

针对DPY-6000: Listener refused connection的修复

尝试使用oracledb的Thin模式连接,无需初始化Oracle Client,适合无管理员权限场景:

import oracledb

# 使用Easy Connect字符串(替换为你的数据库主机、端口、服务名和SSL信息)
dsn = """(description=
    (retry_count=20)(retry_delay=3)
    (address=(protocol=tcps)(port=1521)(host=your-db-host))
    (connect_data=(service_name=your-service-name))
    (security=(ssl_server_cert_dn="CN=your-cert-dn"))
)"""

# 带钱包的连接(钱包目录包含cwallet.sso)
connx = oracledb.connect(
    user='my_user',
    password='my_password',
    dsn=dsn,
    encoding="UTF-8",
    wallet_location=r"C:\path\to\your\wallet_folder"
)
c = connx.cursor()

如果钱包是自动登录模式(存在cwallet.sso),可省略账号密码,直接通过钱包连接:

connx = oracledb.connect(
    dsn=dsn,
    wallet_location=r"C:\path\to\your\wallet_folder",
    encoding="UTF-8"
)

解决cx_Oracle安装问题(可选)

若需使用cx_Oracle,无需安装Microsoft Visual C++,直接下载对应Python版本和系统的预编译wheel包,本地安装:

  1. 找到匹配的wheel文件(例如cx_Oracle-8.3.0-cp310-cp310-win_amd64.whl)
  2. 使用本地pip安装:
    pip install C:\path\to\downloaded\cx_Oracle-xxx.whl
    

内容的提问来源于stack exchange,提问作者Martin Beraldo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:48:35