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目錄下面,這個方法成功。。。該早點看文檔的,
就是每次看英文文檔看的想睡覺就下意識的拒絕。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM