我正在与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
6条答案
按热度按时间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中键入以下命令
字符串
VALUE下的literal是您的listener/service_name。
gwbalxhn2#
我也面临着同样的问题。这就是我的工作:
字符串
型
LD_LIBRARY_PATH
的路径型
.bashrc
文件中型
.bashrc
文件后,我对它进行了源代码:型
然后我的Python脚本又很好地工作了。
另请参见cx_oracledocumentation
lbsnaicq3#
对于Ubuntu Linux 20.04 LTS服务器,什么对我有效(这可能是显而易见的,但对我来说不是!)是1)当您执行导出时,您需要在您打算运行连接到Oracle的应用程序/命令的文件夹中,虽然这起作用,但在关闭EC2服务器的SSH终端后,然后再次不可用,这是通过2)将其添加到~/.bashrc解决的完整步骤:
例如,使用解压缩的Oracle instant client:/opt/oracle/instantclient_19_9
字符串
然后我添加到~/.bashrc:
型
并添加这一行:
型
在终端运行中:
型
我的工作按预期安装在EC2服务器下的'ubuntu'用户与必要的nvm/ nodeJs安装
在nodeJs中,一个示例连接可能看起来像:
型
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/
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
这解决了我的问题
bsxbgnwa6#
如果您正在使用aws lambdas连接到RDS/OracleDB,请尝试使用Docker自动构建aws lambda层-https://medium.com/@sabithvm/building-up-on-lambda-layers-a4771d3b9c7