Search code examples
python-3.xubuntu-18.04cx-oracle

How to fix: cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library - Python


I am establishing a connection to oracle 11g which is in a remote server using cx_oracle 7 with python 3.6.7. my OS in Ubuntu 18.04

I have installed oracle instant client library with libclntsh.so but I am not getting the expected output.

here is the code which i am using to connect to the oracle db

connection = cx_Oracle.connect("username/password@host/port")
print (connection.version)
connection.close()

when the script runs i expect to get the connection version instead i am getting the following error message

File "script.py", line 13, in connection = cx_Oracle.connect("username/password@host/port") 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". See https://oracle.github.io/odpi/doc/installation.html#linux for help


Solution

  • After some more research i got the solution from Ubuntu community , after you have installed oracle instant-client you will have to integrate oracle libraries as follows:

    export LD_LIBRARY_PATH=/usr/lib/oracle/<version>/client(64)/lib/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}

    An example for 12.1 version for Linux x86_64 can be:

    export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}

    where <version> indicates the version of your of your oracle instant-client e.g 11.2, 12.2
    The connection parameter should be as follows

    connection = cx_Oracle.connect("username/password@host/service_name e.g orcl")

    to get the listener/service_name type the following in the oracle sqlplus

    SQL> show parameter local_listener
    

    literal under VALUE is your listener/service_name.