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

Azure Databricks Notebook用cx_Oracle连Oracle报DPI-1047错误

问题根因

你遇到的DPI-1047: Cannot locate a 64-bit Oracle Client library: "libaio.so.1: cannot open shared object file: No such file or directory"报错和你贴的数据库连接代码无关,代码语法本身没有问题,核心是Azure Databricks的运行环境缺失cx_Oracle依赖的底层组件:

  • cx_Oracle是Python层的封装,运行时必须依赖本地安装的64位Oracle Client动态库
  • Oracle Client运行依赖Linux异步IO库libaio.so.1,Azure Databricks默认的集群镜像没有预装这个系统库,也没有自带Oracle Client组件,直接导入使用就会触发这个报错。
排查解决步骤

按顺序操作即可解决:

  • 第一步:安装缺失的libaio系统依赖
    新开Notebook单元格,根据你集群的操作系统版本执行对应shell命令:
    如果是Databricks 7.0以上默认的Ubuntu系运行时:
    %sh
    apt-get update && apt-get install -y libaio1
    
    如果是老版本CentOS系运行时:
    %sh
    yum install -y libaio
    
    注意:直接在Notebook单元格执行shell命令安装的依赖是临时的,集群重启后会失效。需要持久化生效的话,要把安装命令写到集群初始化脚本中,绑定到集群启动配置里
  • 第二步:部署64位Oracle Instant Client
    cx_Oracle必须匹配同架构的Oracle Client才能运行,直接部署官方轻量版Basic包即可:
    1. 提前下载对应版本的64位Oracle Instant Client Basic压缩包,上传到Databricks可访问的存储位置(比如DBFS目录、挂载的ADLS Gen2存储)
    2. 把压缩包解压到集群节点的固定路径,比如/opt/oracle/instantclient_21_9
    3. 在执行数据库连接代码前,先配置环境变量指向Oracle Client路径:
    import os
    # 把路径替换成你实际解压的Oracle Client目录
    ORACLE_CLIENT_PATH = "/opt/oracle/instantclient_21_9"
    os.environ["ORACLE_HOME"] = ORACLE_CLIENT_PATH
    os.environ["LD_LIBRARY_PATH"] = f"{ORACLE_CLIENT_PATH}:{os.environ.get('LD_LIBRARY_PATH', '')}"
    # 首次部署如果提示找不到libclntsh.so,就执行下面这行创建软链
    # os.system(f"ln -s {ORACLE_CLIENT_PATH}/libclntsh.so.21.1 {ORACLE_CLIENT_PATH}/libclntsh.so")
    import cx_Oracle
    
  • 第三步:校验依赖可用性
    先执行cx_Oracle.clientversion(),如果能正常返回Oracle客户端版本号,说明底层依赖加载成功,此时再运行你原来的数据库连接代码即可正常连通。

常见踩坑提醒:

  1. 所有组件必须统一为64位版本,不能混用32位安装包
  2. cx_Oracle版本和Oracle Client版本要匹配,跨大版本容易出现兼容性问题
  3. 不要把Oracle Client放在中文路径、带特殊字符的路径下,避免动态库加载失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:12:29