zoukankan      html  css  js  c++  java
  • Deeping中使用python连接Oralce报错:Cannot locate a 64-bit Oracle Client library: "./instantclient_21_1/libclntsh.so: file too short"

    背景

    最近工作中经常会有测试、项目经理让我查一下生产问题,每次都要去数据库查半天,数据库是部署在客户内网的一个Oracle数据库,
    个人对于Oracle数据库的存储过程不太熟悉,于是想着写个Python脚本方便以后排查问题。网上搜到目前Python连接Oracle数据库
    最好用的库是cx_Oracle,结果第一句代码报错就搞了半天_-_

    本文所述系统及工具版本

    操作系统:Deepin GNU/Linux 20.2
    python版本:3.8.5
    oralce instantclien版本:instantclient_21_1

    代码及错误堆栈

    代码

    import cx_Oracle
    import os
    
    
    def connect_oracle():
        # 加载oracle客户端
        cx_Oracle.init_oracle_client(lib_dir="./instantclient_21_1")
    
        # 连接数据库
        db = cx_Oracle.connect('test', 'testpassword', '127.0.0.1:1521/testdb')
        cur = db.cursor()
        result = cur.execute("SELECT * FROM test_table tt WHERE tt.number = 10")
        for i in result:
            print(i)
    
    
    if __name__ == "__main__":
        connect_oracle()
    

    错误堆栈

    问题解决过程

    1.刚开始以为是文件夹或文件的权限问题,毕竟linux系统中权限问题涉及的是很多的,于是给instantclient_21_1增加读写权限,没用;
    2.后来以为是绝对路径的问题,于是将instantclient_21_1移到python程序的目录下,使用相对路径,没用;
    3.网上搜索,尝试了几种方案,设置了Oracle的一些环境变量之类的,没用;
    4.老老实实跟着错误提示里面的链接去看cx_Oracle的安装文档:

    cx_Oracle安装文档
    直接看linux的部分:https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html#installing-cx-oracle-on-linux
    安装第四步:

    如果机器上没有Oracle软件将会受到影响,要求我们持久化instantclient的路径到运行连接里面,执行下面的代码即可:

    sudo sh -c "echo /opt/oracle/instantclient_21_1 > /etc/ld.so.conf.d/oracle-instantclient.conf"
    sudo ldconfig
    

    为了确保和文档上完全一致,我最后也把instantclient_21_1这个文件夹已到了/opt/oracle目录下面,这个方法成功。。。该早点看文档的,
    就是每次看英文文档看的想睡觉就下意识的拒绝。

    书上说,天下没有不散的宴席。不要怕,书上还说了,人生何处不相逢。

  • 相关阅读:
    JVM 综述
    看 Netty 在 Dubbo 中如何应用
    Netty 心跳服务之 IdleStateHandler 源码分析
    Netty 高性能之道
    Netty 解码器抽象父类 ByteToMessageDecoder 源码解析
    Netty 源码剖析之 unSafe.write 方法
    Netty 出站缓冲区 ChannelOutboundBuffer 源码解析(isWritable 属性的重要性)
    Netty 源码剖析之 unSafe.read 方法
    Netty 内存回收之 noCleaner 策略
    Netty 源码阅读的思考------耗时业务到底该如何处理
  • 原文地址:https://www.cnblogs.com/alinainai/p/14939607.html
Copyright © 2011-2022 走看看