記debian系統安裝cx_oracle歷程

前言

       最近項目需要,在原有同事的debian系統鏡像裏需要安裝cx_oracle對接oracle數據庫,安裝cx_oracle數據庫很簡單,打鏡像直接”RUN pip install cx_oracle“就可以了,但是實際對接數據庫各種問題,在此記錄下。

 

問題:

       在使用cx_oracle對接數據庫提示報錯信息:”DatabaseError: (cx_Oracle.DatabaseError) DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so": cannot open shared object file: No such file or directory...“,大概的意思就是本地沒有一個oracle客戶端,原來cx_oracle對接數據庫服務需要本地有個客戶端,通過客戶端去連接數據庫,真是麻煩,以爲一個cx_oracle就可以搞定了。

解決:

1. 首先尋找對應oracleclient進行安裝,需要考慮oracle服務器版本和linux系統版本,在此提供鏈接:https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

鏈接裏對應版本有basic、basiclite、sqlplus、tools、devel、jdbc和odbc一堆,什麼玩意。。。最後瞭解到只需要安裝必須的basic和basiclite二選一,剩餘的都是可選的,我找了個回答是安裝basic和sqlplus,我也照着安裝了。

2. 於是準備用dockerfile,from同事的基礎鏡像進行安裝,用yum和rpm進行安裝時才發現,這原來是個debian...,陌生不熟悉用的系統,於是乎google、、、、發現apt-get可以在debian上用,於是用apt-get安裝了alien,用alien纔可以安裝rpm包;

3. 一切準備好後,準備打鏡像了,運行exit 0了。。。。,mdzz,有交互式安裝確認,apt-get時需要-y --force-yes;

4. emm最後成功了!強調一下,使用cx_oracle時會在LD_LIBRARY_PATH下找libclntsh.so,應該就是啓動客戶端啥啥的吧,所以我在打鏡像的時候ENV了一個環境變量,也可以在你的腳本里用os設置環境變量。

5. 最後貼上我的dockerfile.yml,希望可以解決碰到相同問題的同學~~

 

FROM dockerhub.datagrand.com/idps/new_extract_api:test_icbc_1408

#環境變量硬編碼及時區
ENV LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib:$LD_LIBRARY_PATH

# 安裝alien用於安裝rpm包
RUN apt-get -y --force-yes install alien


#代碼等加入鏡像,複製到指定目錄
RUN mkdir -p /data_tmp
COPY .  /data_tmp
RUN alien -i /data_tmp/oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
RUN alien -i /data_tmp/oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章