文档章节

cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: 解决方案

一看就喷亏的小猿
 一看就喷亏的小猿
发布于 2018/11/22 23:39
字数 2592
阅读 1214
收藏 0

ODPI-C安装

要在您自己的项目中使用ODPI-C,请从GitHub下载其源代码。如果您希望将ODPI-C构建为共享库,则会提供示例Makefile。否则,将ODPI-C源代码添加到项目中。在Windows上,需要Visual Studio 2008或更高版本。在macOS上,需要Xcode 6或更高版本。在Linux上,需要GCC 4.4或更高版本。

使用ODPI-C的项目需要安装Oracle客户端库。这些库提供必要的网络连接,允许应用程序访问Oracle数据库实例。它们还为ODPI-C应用程序提供基本和高级连接管理和数据功能。

最简单的Oracle客户端是免费的Oracle Instant Client。只需要“基本”或“基本灯”包。任何Oracle数据库安装或完整Oracle客户端安装中也提供Oracle客户端库。

ODPI-C在运行时显式加载可用的Oracle客户端库。这允许使用ODPI-C的代码只构建一次,然后使用可用的Oracle Client 18,12或11.2库运行。如果未找到Oracle客户端库,则会引发错误“DPI-1047:无法加载Oracle客户端库”。

在Windows上,首先在ODPI-C库(或应用程序二进制文件)所在的同一目录中查找Oracle客户端库。如果找不到它们,则Oracle客户端库目录应包含在PATH环境变量中。

在非Windows平台上,如果没有Oracle客户端位于标准操作系统搜索路径(例如$LD_LIBRARY_PATH)中,则 $ORACLE_HOME搜索。

以下各节说明如何确保在各种平台上正确安装和配置Oracle客户端,以便ODPI-C能够找到它。

ODPI-C已经在Linux,Windows和macOS上进行了测试。其他平台也应该有效,但尚未经过测试。

Oracle客户端和Oracle数据库互操作性

ODPI-C可以使用Oracle Client 18,12或11.2库。

Oracle的标准客户端 - 服务器网络互操作性允许不同版本的Oracle客户端和Oracle数据库之间的连接。有关认证配置,请参阅Oracle Support的Doc ID 207303.1。总之,Oracle Client 18和12.2可以连接到Oracle Database 11.2或更高版本。Oracle Client 12.1可以连接到Oracle Database 10.2或更高版本。Oracle Client 11.2可以连接到Oracle Database 9.2或更高版本。创建连接的技术限制可能更灵活。例如,Oracle Client 12.2可以成功连接到Oracle Database 10.2。

由于单个ODPI-C二进制文件可以使用多个客户端版本并访问多个数据库版本,因此在您的预期发布环境中测试应用程序非常重要。较新的Oracle客户端支持新功能,例如12.1或更高版本客户端可用的oraaccess.xml外部配置文件,会话池改进,18或更高版本客户端的呼叫超时以及其他增强功能

该函数dpiContext_getClientVersion()可用于确定正在使用的Oracle客户端版本,该函数 dpiConn_getServerVersion()可用于确定连接正在访问哪个Oracle数据库版本。然后可以使用它们来相应地调整应用程序行为。尝试使用特定客户端/服务器组合不支持的某些Oracle功能可能会导致运行时错误。这些包括:

  • 尝试访问当前Oracle客户端库不支持的属性时,您将收到错误“ORA-24315:非法属性类型”
  • 尝试对Oracle Database 12c使用Oracle Client 11.2的隐式结果时,您将收到错误“ORA-29481:无法将隐式结果返回给客户端”
  • 尝试使用Oracle Client 11.2获取阵列DML行计数时,您将收到错误“DPI-1050:Oracle客户端库必须为12.1或更高版本”

Linux的

ODPI-C需要Oracle客户端库,可以在Oracle Instant Client或Oracle数据库安装中找到,也可以在完整的Oracle客户端安装中找到。这些库必须是32位或64位,与您的应用程序和ODPI-C库(如果单独创建)匹配。

在Linux上,ODPI-C首先使用标准库搜索顺序搜索名为“libclntsh.so”的。如果找不到,则会搜索“libclntsh.so.18.1”,“libclntsh.so.12.1”,然后搜索“libclntsh.so.11.1”。如果找不到库,则$ORACLE_HOME/lib/libclntsh.so检查。如果没有找到库,则返回错误。

Oracle Instant ClientZip¶

使用Oracle Instant Client zip文件运行ODPI-C应用程序:

  1. 下载Oracle 18,12或11.2“Basic”或“Basic Light”zip文件:64位 或32位,与您的应用程序架构相匹配。

  2. 将程序包解压缩到应用程序可访问的单个目录中。例如:

    mkdir -p /opt/oracle
    cd /opt/oracle
    unzip instantclient-basic-linux.x64-12.2.0.1.0.zip

     

  3. libaio使用sudo或root用户安装软件包。例如:

    sudo yum install libaio

     

    在某些Linux发行版上,会调用此包libaio1

  4. 如果计算机上没有其他Oracle软件会受到影响,请将Instant Client永久添加到运行时链接路径。例如,使用sudo或root用户:

    sudo sh -c "echo /opt/oracle/instantclient_12_2 > /etc/ld.so.conf.d/oracle-instantclient.conf"
    sudo ldconfig

    或者,将环境变量设置LD_LIBRARY_PATH为Instant Client版本的相应目录。例如:

    export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH

     

  5. 如果您打算同定位可选的Oracle配置文件,如tnsnames.orasqlnet.oraoraaccess.xml与即时客户端,然后创建一个network/admin子目录,如果它不存在。例如:

    mkdir -p /opt/oracle/instantclient_12_2/network/admin

    这是与此Instant Client链接的应用程序的默认Oracle配置目录。

    或者,Oracle配置文件可以放在另一个可访问的目录中。然后将环境变量 TNS_ADMIN设置为该目录名称。

Oracle Instant ClientRPM¶

使用Oracle Instant Client RPM运行ODPI-C应用程序:

  1. 下载适用于您的应用程序架构的Oracle 18,12或11.2“Basic”或“Basic Light”RPM:64位 或32位

  2. 使用sudo或root用户安装下载的RPM。例如:

    sudo yum install oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm

    Yum会自动安装所需的依赖项,例如libaio

  3. 如果计算机上没有其他Oracle软件会受到影响,请将Instant Client永久添加到运行时链接路径。例如,使用sudo或root用户:

    sudo sh -c "echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
    sudo ldconfig

     或者,将环境变量设置LD_LIBRARY_PATH为Instant Client版本的相应目录。例如:

    export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib:$LD_LIBRARY_PATH

     

  4. 如果您打算共同定位可选的Oracle配置文件,例如tnsnames.orasqlnet.oraoraaccess.xml使用Instant Client,则network/adminlib/其下创建一个子目录 (如果它不存在)。例如:

    sudo mkdir -p /usr/lib/oracle/12.2/client64/lib/network/admin

     

    这是与此Instant Client链接的应用程序的默认Oracle配置目录。

    或者,Oracle配置文件可以放在另一个可访问的目录中。然后将环境变量 TNS_ADMIN设置为该目录名称。

本地数据库或完整Oracle客户端

ODPI-C应用程序可以使用本地Oracle数据库或完整Oracle客户端安装中的Oracle Client 18,12或11.2库。

这些库必须是32位或64位,与您的应用程序和ODPI-C库(如果单独创建)匹配。

  1. 通过运行Oracle环境脚本来设置所需的Oracle环境变量。例如:

    source /usr/local/bin/oraenv

    对于Oracle Database XE 11.2,运行:

    source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh

     

  2. 可选的Oracle配置文件,例如tnsnames.ora, sqlnet.ora或者oraaccess.xml可以放在其中 $ORACLE_HOME/network/admin

    或者,Oracle配置文件可以放在另一个可访问的目录中。然后将环境变量 TNS_ADMIN设置为该目录名称。

窗口

ODPI-C需要Oracle客户端库,可以在Oracle Instant Client或Oracle数据库安装中找到,也可以在完整的Oracle客户端安装中找到。这些库必须是32位或64位,与您的应用程序和ODPI-C库(如果单独创建)匹配。

在Windows上,ODPI-C首先在包含ODPI-C库(或应用程序)的目录中查找Oracle客户端库“OCI.dll”,然后使用标准库搜索顺序进行搜索

Oracle客户端库需要存在正确的Visual Studio可再发行组件。

Oracle Instant ClientZip¶

使用Oracle Instant Client zip文件运行ODPI-C应用程序:

  1. 下载Oracle 18,12或11.2“Basic”或“Basic Light”zip文件:64位 或32位,与您的应用程序架构相匹配。

  2. 例如,将程序包解压缩到应用程序可访问的单个目录中C:\oracle\instantclient_12_2

  3. 设置环境变量PATH以包括您在步骤2中创建的路径。例如,在Windows 7上,PATH在控制面板 - >系统 - >高级系统设置 - >高级 - >环境变量 - >系统变量 - >路径中更新。

  4. 如果您打算共同定位可选的Oracle配置文件,例如tnsnames.orasqlnet.oraoraaccess.xml与Instant Client,则创建network\admin子目录(如果它不存在),例如 C:\oracle\instantclient_12_2\network\admin

    这是与此Instant Client链接的应用程序的默认Oracle配置目录。

    或者,Oracle配置文件可以放在另一个可访问的目录中。然后将环境变量 TNS_ADMIN设置为该目录名称。

如果要将Instant Client与应用程序打包在一起,可以将Instant Client库移动到与ODPI-C库(或应用程序)相同的目录中。 有关所需的最小Instant Client文件集,请参阅Instant Client文档。没有必要设置PATH。这仅适用于Windows。

本地数据库或完整Oracle客户端

Oracle库必须是32位或64位,与您的应用程序和ODPI-C库(如果单独创建)匹配。

要使用本地Oracle数据库(或完整Oracle客户端)18,12或11.2安装中的客户端库来运行ODPI-C应用程序:

  1. 设置环境变量PATH以包含包含OCI.dll的路径(如果尚未设置)。例如,在Windows 7上, PATH在控制面板 - >系统 - >高级系统设置 - >高级 - >环境变量 - >系统变量 - >路径中更新。

  2. 可选的Oracle配置文件,例如tnsnames.ora, sqlnet.ora或者oraaccess.xml可以放在network/adminOracle软件的 子目录中。

    或者,Oracle配置文件可以放在另一个可访问的目录中。然后将环境变量 TNS_ADMIN设置为该目录名称。

© 著作权归作者所有

一看就喷亏的小猿
粉丝 11
博文 48
码字总数 102457
作品 0
揭阳
私信 提问
python中cx_Oracle模块安装遇到的问题与解决方法

安装或使用cxOracle时,需要用到Oracel的链接库,如libclntsh.so.10.1,否则会有各种各样的错误信息。 安装Oracle Instant Client就可得到这个链接库,避免安装几百兆之巨的Oracle Client。 ...

JAVA枪手
2016/01/13
132
0
macos下 python安装cx_oracle

首先通过命令安装cx_Oracle pip install cx_Oracle 也可在pycharm里面安装,File->Default Setting ->Project Interpreter->添加cx_Oracle->Install package; 如果安装失败,点击Manage Repo......

啊哈关关
2016/12/03
768
0
mac上安装python3的cx_Oracle数据库驱动

问题 使用Python3 for mac上面的cx_Oracle数据库驱动 步骤 下载Oracle的Instant Client 程序包 Instant Client 下载适用于 Mac OS X (Intel x86) 这里版本的选择,应该根据你访问的oracle库的...

亚林瓜子
2018/08/03
47
0
windows下安装cx_Oracle的方法

Install cx_Oracle Use Python’s Pip package to install cxOracle from PyPI: python -m pip install cx_Oracle --upgrade This will download and install a pre-compiled binary if one ......

良言
2018/07/09
710
0
mac 上,import cx_Oracle 报错:Symbol not found: _OCIAttrGet

最近由于项目需要,需要安装cx_Oracle,我按照教程:http://joelvasallo.com/?p=276 成功安装了cx_Oracle,但是在import cx_Oracle时报错: bogon:~ lichunyan$ python Python 2.7.9 (v2.7.9:6...

kaxifa
2016/04/21
658
2

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
64
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
26
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
43
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
27
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
昨天
44
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部