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

使用oracledb连接Oracle 10数据库时遇DPI-1047错误求助

解决oracledb连接Oracle 10g时的DPI-1047错误

核心问题分析

DPI-1047错误本质是oracledb模块找不到匹配的Oracle客户端核心库,大多由位数不匹配、路径错误、文件缺失三类原因导致。

分步排查与解决

  • 严格匹配Python与客户端位数
    必须保证Python和Oracle客户端同为64位或32位,混装直接导致加载失败。比如用64位Python,就只测试64位客户端,放弃32位版本。

  • 修正lib_dir路径配置

    • 路径必须指向Oracle Instant Client的根目录(比如解压后的instantclient_12_1文件夹),建议用绝对路径避免相对路径的坑,示例:lib_dir=r"C:\oracle\instantclient_12_1"(r前缀避免转义问题)。
    • 路径里不能有中文、空格或特殊字符,比如C:\Program Files\Oracle Client这类带空格的路径容易出问题,尽量放在纯英文无空格的目录下。
  • 检查客户端文件完整性
    确认Instant Client文件夹里包含oci.dll、oraociei12.dll、oraons.dll这些核心文件,若缺失,重新从Oracle官网下载对应版本的Instant Client并解压。

  • 配置系统PATH环境变量
    将Instant Client的根目录添加到系统PATH环境变量最前端,之后重启Python运行环境(IDE、命令行窗口都要重启),可以尝试去掉代码里的lib_dir参数,直接调用oracledb.init_oracle_client()让系统自动查找。

  • 适配Oracle 10g的客户端版本
    Oracle 10g数据库推荐用11.2版本的Instant Client连接,下载对应位数的11.2版本,重复上述路径配置步骤测试。

调整后的代码示例

import oracledb
# 替换为你的Instant Client绝对路径
oracledb.init_oracle_client(lib_dir=r"C:\oracle\instantclient_11_2")
with oracledb.connect(user="etusae1", password="***", host="162.38.222.149", port=1521, sid="iut") as connection:
    with connection.cursor() as cursor:
        sql = """select sysdate from dual"""
        for r in cursor.execute(sql):
            print(r)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:05:05