cx_Oracle.DatabaseError: DPI-1047
ODPI-C Installation¶
Overview¶
To use ODPI-C in your own project, download its source from GitHub. A sample Makefile is provided if you wish to build ODPI-C as a shared library. Otherwise, add the ODPI-C source code to your project. On Windows, Visual Studio 2008 or higher is required. On macOS, Xcode 6 or higher is required. On Linux, GCC 4.4 or higher is required.
Projects using ODPI-C require Oracle Client libraries to be installed. The libraries provide the necessary network connectivity allowing applications to access an Oracle Database instance. They also provide basic and advanced connection management and data features to ODPI-C applications.
The simplest Oracle Client is the free Oracle Instant Client. Only the “Basic” or “Basic Light” package is required. Oracle Client libraries are also available in any Oracle Database installation or full Oracle Client installation.
ODPI-C explicitly loads available Oracle Client libraries at runtime. This allows code using ODPI-C to be built only once, and then run using available Oracle Client 11.2, 12.1 or 12.2 libraries. On non-Windows platforms, if no Oracle Client is located in the standard operating system search page (e.g. LD_LIBRARY_PATH), then ORACLE_HOME is searched. If Oracle Client libraries are still not found, the error “DPI-1047: Oracle Client library cannot be loaded” is raised.
The following sections explain how to ensure the Oracle Client is installed and configured correctly on the various platforms so that ODPI-C is able to find it.
ODPI-C has been tested on Linux, Windows and macOS. Other platforms should also work but have not been tested.
Oracle Client and Database Versions¶
ODPI-C can use Oracle Client 11.2, 12.1 or 12.2 libraries.
Oracle’s standard client-server network interoperability allows connections between different versions of Oracle Client and Oracle Database. For certified configurations see Oracle Support’s Doc ID 207303.1. In summary, Oracle Client 12.2 can connect to Oracle Database 11.2 or greater. Oracle Client 12.1 can connect to Oracle Database 10.2 or greater. Oracle Client 11.2 can connect to Oracle Database 9.2 or greater. The technical restrictions on creating connections may be more flexible. For example Oracle Client 12.2 can successfully connect to Oracle Database 10.2.
Since a single ODPI-C binary can use multiple client versions and access multiple database versions, it is important your application is tested in your intended release environments. Newer Oracle clients support new features, such as the oraaccess.xml external configuration file available with 12.1 or later clients, and session pool enhancements to dead connection detection in 12.2 clients.
The function dpiContext_getClientVersion() can be used to determine which Oracle Client version is in use and the function dpiConn_getServerVersion() can be used to determine which Oracle Database version a connection is accessing. These can then be used to adjust application behavior accordingly. Attempts to use some Oracle features that are not supported by a particular client/server combination may result in runtime errors. These include:
- when attempting to access attributes that are not supported by the current Oracle Client library you will get the error “ORA-24315: illegal attribute type”
- when attempting to use implicit results with Oracle Client 11.2 against Oracle Database 12c you will get the error “ORA-29481: Implicit results cannot be returned to client”
- when attempting to get array DML row counts with Oracle Client 11.2 you will get the error “DPI-1013: not supported”
Linux¶
ODPI-C requires Oracle Client libraries, which are found in Oracle Instant Client, or an Oracle Database installation, or in a full Oracle Client installation. The libraries must be either 32-bit or 64-bit, matching your application and ODPI-C library (if one is created separately).
On Linux, ODPI-C first searches for a library called “libclntsh.so” using the standard library search order. If this is not found, it will then search for “libclntsh.so.12.1” and then for “libclntsh.so.11.1” before returning an error.
Oracle Instant Client Zip¶
To run ODPI-C applications with Oracle Instant Client zip files:
Download an Oracle 11.2, 12.1 or 12.2 “Basic” or “Basic Light” zip file: 64-bit or 32-bit, matching your application architecture.
Unzip the package into a single directory that is accessible to your application. For example:
mkdir -p /opt/oracle
cd /opt/oracle
unzip instantclient-basic-linux.x64-12.2.0.1.0.zipInstall the
libaiopackage with sudo or as the root user. For example:sudo yum install libaio
On some Linux distributions this package is called
libaio1instead.If there is no other Oracle software on the machine that will be impacted, permanently add Instant Client to the runtime link path. For example, with sudo or as the root user:
sudo sh -c "echo /opt/oracle/instantclient_12_2 > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfigAlternatively, set the environment variable
LD_LIBRARY_PATHto the appropriate directory for the Instant Client version. For example:export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH
If you intend to co-locate optional Oracle configuration files such as
tnsnames.ora,sqlnet.oraororaaccess.xmlwith Instant Client, then create anetwork/adminsubdirectory. For example:mkdir -p /opt/oracle/instantclient_12_2/network/admin
This is the default Oracle configuration directory for applications linked with this Instant Client.
Alternatively, Oracle configuration files can be put in another, accessible directory. Then set the environment variable
TNS_ADMINto that directory name.
Oracle Instant Client RPM¶
To run ODPI-C applications with Oracle Instant Client RPMs:
Download an Oracle 11.2, 12.1 or 12.2 “Basic” or “Basic Light” RPM: 64-bit or 32-bit, matching your application architecture.
Install the downloaded RPM with sudo or as the root user. For example:
sudo yum install oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
Yum will automatically install required dependencies, such as
libaio.If there is no other Oracle software on the machine that will be impacted, permanently add Instant Client to the runtime link path. For example, with sudo or as the root user:
sudo sh -c "echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfigAlternatively, set the environment variable
LD_LIBRARY_PATHto the appropriate directory for the Instant Client version. For example:export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib:$LD_LIBRARY_PATH
If you intend to co-locate optional Oracle configuration files such as
tnsnames.ora,sqlnet.oraororaaccess.xmlwith Instant Client, then create anetwork/adminsubdirectory underlib/. For example:sudo mkdir -p /usr/lib/oracle/12.2/client64/lib/network/admin
This is the default Oracle configuration directory for applications linked with this Instant Client.
Alternatively, Oracle configuration files can be put in another, accessible directory. Then set the environment variable
TNS_ADMINto that directory name.
Local Database or Full Oracle Client¶
ODPI-C applications can use Oracle Client 11.2, 12.1 or 12.2 libraries from a local Oracle Database or full Oracle Client installation.
The libraries must be either 32-bit or 64-bit, matching your application and ODPI-C library (if one is created separately).
Set required Oracle environment variables by running the Oracle environment script. For example:
source /usr/local/bin/oraenv
For Oracle Database XE, run:
source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
Optional Oracle configuration files such as
tnsnames.ora,sqlnet.oraororaaccess.xmlcan be placed in$ORACLE_HOME/network/admin.Alternatively, Oracle configuration files can be put in another, accessible directory. Then set the environment variable
TNS_ADMINto that directory name.
Windows¶
ODPI-C requires Oracle Client libraries, which are found in Oracle Instant Client, or an Oracle Database installation, or in a full Oracle Client installation. The libraries must be either 32-bit or 64-bit, matching your application and ODPI-C library (if one is created separately).
On Windows, ODPI-C searches for the Oracle Client library “OCI.dll” using the standard library search order.
Oracle Client libraries require the presence of the correct Visual Studio redistributable.
- 11.2 : VS 2005 64-bit or VS 2005 32-bit
- 12.1 : VS 2010
- 12.2 : VS 2013
Oracle Instant Client Zip¶
To run ODPI-C applications with Oracle Instant Client zip files:
Download an Oracle 11.2, 12.1 or 12.2 “Basic” or “Basic Light” zip file: 64-bit or 32-bit, matching your application architecture.
Unzip the package into a single directory that is accessible to your application, for example
C:\oracle\instantclient_12_2.Set the environment variable
PATHto include the path that you created in step 2. For example, on Windows 7, updatePATHin Control Panel -> System -> Advanced System Settings -> Advanced -> Environment Variables -> System Variables -> PATH.If you intend to co-locate optional Oracle configuration files such as
tnsnames.ora,sqlnet.oraororaaccess.xmlwith Instant Client, then create anetwork\adminsubdirectory, for exampleC:\oracle\instantclient_12_2\network\admin.This is the default Oracle configuration directory for applications linked with this Instant Client.
Alternatively, Oracle configuration files can be put in another, accessible directory. Then set the environment variable
TNS_ADMINto that directory name.
Local Database or Full Oracle Client¶
The Oracle libraries must be either 32-bit or 64-bit, matching your application and ODPI-C library (if one is created separately).
To run ODPI-C applications using client libraries from a local Oracle Database (or full Oracle Client) 11.2, 12.1 or 12.2 installation:
Set the environment variable
PATHto include the path that contains OCI.dll, if it is not already set. For example, on Windows 7, updatePATHin Control Panel -> System -> Advanced System Settings -> Advanced -> Environment Variables -> System Variables -> PATH.Optional Oracle configuration files such as
tnsnames.ora,sqlnet.oraororaaccess.xmlcan be placed in thenetwork/adminsubdirectory of the Oracle software.Alternatively, Oracle configuration files can be put in another, accessible directory. Then set the environment variable
TNS_ADMINto that directory name.
macOS¶
ODPI-C requires Oracle Client libraries, which are found in Oracle Instant Client for macOS.
On macOS, ODPI-C first searches for a library called “libclntsh.dylib” using the standard library search order. If this is not found, it will then search for “libclntsh.dylib.12.1” and then for “libclntsh.dylib.11.1” before returning an error.
Oracle Instant Client Zip¶
To run ODPI-C applications with Oracle Instant Client zip files:
Download the 11.2, 12.1 or 12.2 “Basic” or “Basic Light” zip file from here. Choose either a 64-bit or 32-bit package, matching your application architecture. Most applications use 64-bit.
Unzip the package into a single directory that is accessible to your application. For example:
mkdir -p /opt/oracle
unzip instantclient-basic-macos.x64-12.2.0.1.0.zipAdd links to
$HOME/libor/usr/local/libto enable applications to find the library. For example:mkdir ~/lib
ln -s /opt/oracle/instantclient_12_2/libclntsh.dylib.12.1 ~/lib/Alternatively, copy the required OCI libraries. For example:
mkdir ~/lib
cp /opt/oracle/instantclient_12_2/{libclntsh.dylib.12.1,libclntshcore.dylib.12.1,libons.dylib,libnnz12.dylib,libociei.dylib} ~/lib/For Instant Client 11.2, the OCI libraries must be copied. For example:
mkdir ~/lib
cp /opt/oracle/instantclient_11_2/{libclntsh.dylib.11.1,libnnz11.dylib,libociei.dylib} ~/lib/If you intend to co-locate optional Oracle configuration files such as
tnsnames.ora,sqlnet.oraororaaccess.xmlwith Instant Client, then create anetwork/adminsubdirectory. For example:mkdir -p /opt/oracle/instantclient_12_2/network/admin
This is the default Oracle configuration directory for applications linked with this Instant Client.
Alternatively, Oracle configuration files can be put in another, accessible directory. Then set the environment variable
TNS_ADMINto that directory name.
Other Platforms¶
To run ODPI-C applications on other platforms (such as Solaris and AIX), follow the same general directions as for Linux Instant Client zip files or Local Database. Add the Oracle libraries to the appropriate library path variable, such as LD_LIBRARY_PATH on Solaris, or LIBPATH on AIX.
cx_Oracle.DatabaseError: DPI-1047的更多相关文章
- cx_Oracle.DatabaseError: ORA-12541: TNS:no listener
问题:利用Python连接Oracle时报错,完整过程如下 import cx_Oracle conn = cx_Oracle.connect('testma/dingjia@192.168.88.1 ...
- cx_Oracle.DatabaseError: ORA-28759: failure to open file
找了好久这个问题,有人说是tcps的问题,需要自己生成证书什么的,后来才发现原来是 钱包文件路径 的问题,钱包文件解压后必须放在instantclien/network/admin下,在Windows ...
- (cx_Oracle.DatabaseError) DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so: cannot open shared object file: No such file or directory"
打开https://oracle.github.io/odpi/doc/installation.html 官方相关如下 Oracle Instant Client RPM¶ To run ODPI- ...
- windows10,redhat6.5下python3.5.2使用cx_Oracle链接oracle
0.序言 项目主要使用oracle但是我不太喜欢其他编程语言,加上可能需要用python部署算法包,从oracle表中读出数据,处理完成后在放回oracle中去,所以在windows上就想到先用pyt ...
- python使用cx_Oracle连接oracle
1.使用pip命令安装cx_Oracle $ pip install cx_Oracle 2.安装oracle客户端,并添加到path 下载路径: http://www.oracle.com/tech ...
- cx_Oracle连接数据库总结
python中连接oracle数据库使用第三方库文件cx_Oracle时遇到了各种问题,网上查找资料调试了几天才弄好,下面是不断调试后总结的一些经验.1.oracle客户端(Oracle Instan ...
- Python cx_Oracle问题处理
今天第一次使用Python连接Oracle数据库(多么可怕,三年码农没用Python手动连过Oracle) 首先: pip install cx_Oracle 好,安装完成,测试代码如下: from ...
- Python3安装cx_Oracle连接oracle数据库实操总结
弄清版本,最重要!!! 首先安装配置时,必须把握一个点,就是版本一致!包括:系统版本,python版本,oracle客户端的版本,cx_Oracle的版本,然后安装配置就容易了! 如果已经安装Pyth ...
- 第八篇:cx_Oracle出现的问题
1.cx_Oracle.DatabaseError: ORA-24315: illegal attribute type 2.cx_Oracle.InterfaceError: Unable to a ...
随机推荐
- centos7 firewall-cmd 理解多区域配置中的 firewalld 防火墙
原文:https://www.linuxidc.com/Linux/2017-11/148795.htm 现在的新闻里充斥着服务器被攻击和数据失窃事件.对于一个阅读过安全公告博客的人来说,通过访问错误 ...
- C#一年中有多少周方法和js一年中第几周
最近在做一个时间插件,用的是jquery-daterangepicker ,现在分享一下查询时间是一年中的第几周的js方法 和 一年中有多少周的C#后台方法,默认是按照周一为一周的开始,如果一年的第 ...
- AD中组的概念
- 00008 - crontab定时执行任务命令详解
linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所以, ...
- java加减天数
指定日期的加减天数 public static String setDay(int num,String newDate) throws ParseException{ SimpleDateForma ...
- 第2章 GNS3和PacketTracer网络模拟器(3)_搭建Packet tracer实验环境
3. Packet tracer实验环境 3.1 设置网络拓扑图 (1)配置路由器局域网和广域网接口,如上图(可双击相应的图标,然后在命令行或图形界面上进行IP地址等配置) ①本例采用“Generic ...
- 15 Linux系统的终端
在上一节的内容中,我们提到了设备文件,包括块设备文件(b)以及字符设备文件(c),这一节里面我们主要为大家说明Linux系统如何通过终端进行控制管理的,在这个过程中就用到相应的设备文件: Linux系 ...
- Ambari集群的搭建(离线安装)
我们先克隆几台机器 我们打开克隆出来的机器 我们先把主机名修改一下 我们把主机名改成am2 下一步我们来配置网卡 把原来的eth0的注释掉,把现在的eth1改成eth0,同时把mac地址记下来 保存退 ...
- url后面带斜杠与不带斜杠的区别
比如: https://www.baidu.com/test/ https://www.baidu.com/test 当Web服务器接收到对某个末尾不含斜杠的url请求时,例如https://www. ...
- CSS 随笔
1.动态修改div的大小 Html: <div> Hello </div> css: div { resize:both; overflow:auto; } 2. box-si ...