【问题标题】:Linux. Connect ot Oracle. cx_Oracle.DatabaseError: DPI-1047 Cannot locate a 64-bit Oracle Client library: "libclntsh.soLinux。连接到 Oracle。 cx_Oracle.DatabaseError:DPI-1047 找不到 64 位 Oracle 客户端库:“libclntsh.so
【发布时间】:2020-04-11 14:06:03
【问题描述】:

我有错误“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”。请参阅 https://oracle.github.io/odpi/doc/installation.html#linux 寻求帮助”

我看到了https://oracle.github.io/odpi/doc/installation.html#oracle-instant-client-zipHow to fix: cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library - Python

我一直在 Windows 上工作,只在 Linux 系统上学习。我需要这个问题的帮助。从 python 连接到 Oracle:

import cx_Oracle
con = cx_Oracle.connect('<USER>/<PASSWORD>@<HOST>:<PORT>/<SID>')

我从未从 Linux 连接过。这是第一次。

user@postgresql:~/opt$ cd oracle
user@postgresql:~/opt/oracle$ unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
Archive:  instantclient-basic-linux.x64-12.2.0.1.0.zip
inflating: instantclient_12_2/adrci  
inflating: instantclient_12_2/BASIC_README  
inflating: instantclient_12_2/genezi  
inflating: instantclient_12_2/libclntshcore.so.12.1  
inflating: instantclient_12_2/libclntsh.so.12.1  
inflating: instantclient_12_2/libipc1.so  
inflating: instantclient_12_2/libmql1.so  
inflating: instantclient_12_2/libnnz12.so  
inflating: instantclient_12_2/libocci.so.12.1  
inflating: instantclient_12_2/libociei.so  
inflating: instantclient_12_2/libocijdbc12.so  
inflating: instantclient_12_2/libons.so  
inflating: instantclient_12_2/liboramysql12.so  
inflating: instantclient_12_2/ojdbc8.jar  
inflating: instantclient_12_2/uidrvci  
inflating: instantclient_12_2/xstreams.jar
user@postgresql:~$ sudo apt install libaio1
user@postgresql:/etc/ld.so.conf.d$ sudo nano oracle-instantclient.conf
user@postgresql:/etc/ld.so.conf.d$ sudo ldconfig
user@postgresql:/etc/ld.so.conf.d$ sudo export 
LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH

Linux

user@postgresql:~$ cat /proc/version
Linux version 5.3.0-46-generic (buildd@lgw01-amd64-003) (gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2)) #38-Ubuntu SMP Fri Mar 27 17:37:05 UTC 2020

【问题讨论】:

    标签: python linux oracle cx-oracle


    【解决方案1】:

    问题解决了。也许这会很糟糕: 下载 rpm(oracle-instantclient12.2-basic, oracle-instantclient12.2-devel, oracle-instantclient12.2-devel)。

    当然,只需要 oracle-instantclient12.2

    sudo apt-get install oracle-instantclient12.2-basic-12.2.0.*
    

    只需添加到 PATH:

    user@postgresql:~$export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
    user@postgresql:~$sudo ldconfig
    user@postgresql:~$ sudo nano  /etc/profile.d/oracle.sh && sudo chmod o+r /etc/profile.d/oracle.sh
    export PATH=$PATH:/usr/lib/oracle/12.2/client64/bin
    

    【讨论】:

    • 永远不要为 Instant Client 设置 ORACLE_HOME。这不是 Oracle 家庭安装。只需设置您的库搜索路径,最好像您所做的那样使用ldconfig,并如这些Linux x64 Instant Client installation instructions 所示。使用此设置,您无需设置LD_LIBRARY_PATH。此外,您应该使用 19c,它实际上是 12c 行的重命名终端版本。它连接到与 12.2 Instant Client 相同的数据库版本。
    • @Christopher Jones,谢谢。令我惊讶的是,指令中没有关于 ORACLE_HOME 的消息。现在,明白了。请告诉我,需要在“PATH”中写入即时客户端的路径吗?
    • 在 Linux 上,如果您安装了带有二进制文件的工具,则只需要 PATH。 (一个特殊的例外是 19c sqlplus RPM 包将创建一个链接,因此 PATH 不仅仅需要该二进制文件)
    • @Christopher Jones 谢谢!
    【解决方案2】:

    对于 WSL Ubuntu

    1. 你将从https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html下载instantclient-basic 和instantclient-sqlplus for linux 的zip 版本。
    2. 创建一个名为 /opt/oracle 的文件夹
    sudo mkdir -p /opt/oracle
    cd /opt/oracle/
    
    1. 现在安装 zip 和 libaio1
    apt-get install zip libaio1
    cd /opt/oracle/
    
    1. 将 Instantclient basic 和 sqlplus 版本解压到创建的 oracle 文件夹中。
    unzip /location/to/your/download/instantclient-basic-linux.x64-12.2.0.1.0.zip
    unzip /location/to/your/download/instantclient-sqlplus-linux.x64-12.2.0.1.0.zip
    
    1. 将目录更改为 Instantclient_12_2
    cd instantclient_12_2/
    
    1. 运行以下命令
    ln -s libclntsh.so.12.1 libclntsh.so
    ln -s libocci.so.12.1 libocci.so
    
    1. 编辑 .bashrc 文件以设置 oracle home。
    sudo nano $HOME/.bashrc
    
    1. 将以下行添加到 .bashrc 的末尾
    # set oracle home at the end of the file
    export ORACLE_HOME=/opt/oracle/instantclient_12_2
    export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
    export PATH=$ORACLE_HOME:$PATH
    
    source $HOME/.bashrc
    
    1. 最后,安装 cx_Oracle

    【讨论】:

    • 这不适用于更新的 Oracle 客户端库,例如 21.3?
    • 我认为,工作,但我不尝试。我会尝试添加答案。
    猜你喜欢
    • 2019-09-13
    • 2019-10-10
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多