如何修复:cx_Oracle.DatabaseError:DPI-1047:找不到64位Oracle客户端库- Python

i34xakig  于 2023-08-08  发布在  Python
关注(0)|答案(6)|浏览(167)

我正在与oracle 11 g建立连接,该连接位于远程服务器中,使用cx_oracle 7和python 3.6.7。我的OS在Ubuntu 18.04
我已经在libclntsh.so上安装了oracle instant client库,但没有得到预期的输出。
这是我用来连接到oracle数据库的代码

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

字符串
当脚本运行我期望得到连接版本代替我得到以下错误消息
文件“script.py“,第13行,在connection = cx_Oracle.connect(“username/password@host/port”)cx_Oracle.DatabaseError:DPI-1047:找不到64位Oracle客户端库:“libclntsh.so:无法打开共享目标文件:没有这样的文件或目录“”。有关帮助,请访问https://oracle.github.io/odpi/doc/installation.html#linux

oiopk7p5

oiopk7p51#

经过更多的研究,我从Ubuntu community得到了解决方案,在安装了oracle instant-client之后,你必须集成oracle库,如下所示:
导出LD_LIBRARY_PATH=/usr/lib/oracle/ <version> /client(64)/lib/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
Linux x86_64 12.1版本的示例可以是:
export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
其中<version>表示oracle instant-client的版本,例如11.2、12.2
连接参数应如下所示
connection = cx_Oracle.connect("username/password@host/service_name e.g orcl")
要获取侦听器/service_name,请在oracle sqlplus中键入以下命令

SQL> show parameter local_listener

字符串
VALUE下的literal是您的listener/service_name。

gwbalxhn

gwbalxhn2#

我也面临着同样的问题。这就是我的工作:

  • 首先,我下载了Oracle Basiczip file。在我的例子中,我得到了64位版本。
  • 之后,我将它解压缩到opt目录中。我不得不在我的系统中使用 sudo
$ sudo mkdir -p /opt/oracle  

    $ cd /opt/oracle  

    $ sudo unzip /opt/oracle/instantclient-basic-linux.x64-19.8.0.0.0dbru.zip

字符串

  • 然后我安装了 libaio1。请注意,我正在使用Ubuntu
$ sudo apt-get install libaio1

  • 最后,我添加了外部变量LD_LIBRARY_PATH的路径
$ vim ~/.bashrc

  • 并将此行添加到.bashrc文件中
export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_8:$LD_LIBRARY_PATH

  • 保存.bashrc文件后,我对它进行了源代码:
$ source ~/.bashrc


然后我的Python脚本又很好地工作了。
另请参见cx_oracledocumentation

lbsnaicq

lbsnaicq3#

对于Ubuntu Linux 20.04 LTS服务器,什么对我有效(这可能是显而易见的,但对我来说不是!)是1)当您执行导出时,您需要在您打算运行连接到Oracle的应用程序/命令的文件夹中,虽然这起作用,但在关闭EC2服务器的SSH终端后,然后再次不可用,这是通过2)将其添加到~/.bashrc解决的完整步骤:
例如,使用解压缩的Oracle instant client:/opt/oracle/instantclient_19_9

sudo apt-get install libaio1
cd ~/your-project-folder
export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_9

字符串
然后我添加到~/.bashrc:

sudo nano ~/.bashrc


并添加这一行:

export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_9


在终端运行中:

source ~/.bashrc


我的工作按预期安装在EC2服务器下的'ubuntu'用户与必要的nvm/ nodeJs安装
在nodeJs中,一个示例连接可能看起来像:

const testOracleConnection = async () => {
    let conn;

    try {
        conn = await oracledb.getConnection(oracleConfig);

        const query1 = 'select ID, anotherColumn from someTable where ID = 1111';

        const result = await conn.execute(query1);

        console.log(result);
    } catch (err) {
        console.error(err);
    } finally {
        if (conn) {
            try {
                await conn.close();
            } catch (err) {
                console.error(err);
            }
        }
    }
};

i2loujxw

i2loujxw4#

我几乎放弃了这个错误。我尝试了互联网上所有的解决方案,但没有任何效果。
我在Unix中写了一个类似的脚本,我得到了同样的错误。我已经应用了相同的修复,我在shell脚本中使用,它的工作就像魅力。
如果我直接执行Python脚本,它可以通过cx_Oracle访问数据库。但是当我通过crontab计划它时,我经常得到错误“cx_Oracle.DatabaseError:DPI-1047”
这就是解决办法。导入操作系统模块并添加以下代码。
os.environ[“ORACLE_HOME”] =“您的oracle库“。在我的例子中,它是/u 01/oracle/product/12.1.0.2/

iugsix8n

iugsix8n5#

我在使用Python的Debian 10镜像版本时也遇到了类似的问题,我按照以下步骤解决了我的docker镜像问题:
步骤1:从Oracle official site下载oracle-instantclient19.19-basic-19.19.0.0.0-1.x86_64.rpm:
步骤2:安装在基础映像中
步骤3:我设置了以下ENV变量:
ENV ORACLE_HOME=/usr/lib/oracle/19.19/client64 ENV LD_LIBRARY_PATH=$ORACLE_HOME/lib
这解决了我的问题

bsxbgnwa

bsxbgnwa6#

如果您正在使用aws lambdas连接到RDS/OracleDB,请尝试使用Docker自动构建aws lambda层-https://medium.com/@sabithvm/building-up-on-lambda-layers-a4771d3b9c7

相关问题