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目录下面,这个方法成功。。。该早点看文档的,
    就是每次看英文文档看的想睡觉就下意识的拒绝。

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

  • 相关阅读:
    Java链接 Oracle11g R2
    MARS3.6 Programming
    相关分析
    统计学中的P值与显著性的意义
    Java的输入/输出操作
    SQL Server数据类型一览表
    Fragstats:使用R软件读取frag78b.asc文件
    收藏一下大牛的数据挖掘学习经验
    数据库系统概论(第四版)习题解答
    ArcGIS中的坐标系统定义与投影转换
  • 原文地址:https://www.cnblogs.com/alinainai/p/14939607.html
Copyright © 2011-2022 走看看