要在您本身的项目中使用ODPI-C,请从GitHub下载其源代码。若是您但愿将ODPI-C构建为共享库,则会提供示例Makefile。不然,将ODPI-C源代码添加到项目中。在Windows上,须要Visual Studio 2008或更高版本。在macOS上,须要Xcode 6或更高版本。在Linux上,须要GCC 4.4或更高版本。html
使用ODPI-C的项目须要安装Oracle客户端库。这些库提供必要的网络链接,容许应用程序访问Oracle数据库实例。它们还为ODPI-C应用程序提供基本和高级链接管理和数据功能。java
最简单的Oracle客户端是免费的Oracle Instant Client。只须要“基本”或“基本灯”包。任何Oracle数据库安装或完整Oracle客户端安装中也提供Oracle客户端库。linux
ODPI-C在运行时显式加载可用的Oracle客户端库。这容许使用ODPI-C的代码只构建一次,而后使用可用的Oracle Client 18,12或11.2库运行。若是未找到Oracle客户端库,则会引起错误“DPI-1047:没法加载Oracle客户端库”。git
在Windows上,首先在ODPI-C库(或应用程序二进制文件)所在的同一目录中查找Oracle客户端库。若是找不到它们,则Oracle客户端库目录应包含在PATH
环境变量中。github
在非Windows平台上,若是没有Oracle客户端位于标准操做系统搜索路径(例如$LD_LIBRARY_PATH
)中,则 $ORACLE_HOME
搜索。sql
如下各节说明如何确保在各类平台上正确安装和配置Oracle客户端,以便ODPI-C可以找到它。数据库
ODPI-C已经在Linux,Windows和macOS上进行了测试。其余平台也应该有效,但还没有通过测试。windows
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或更高版本”
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 Client zip文件运行ODPI-C应用程序:
下载Oracle 18,12或11.2“Basic”或“Basic Light”zip文件:64位 或32位,与您的应用程序架构相匹配。
将程序包解压缩到应用程序可访问的单个目录中。例如:
mkdir -p /opt/oracle cd /opt/oracle unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
libaio
使用sudo或root用户安装软件包。例如:
sudo yum install libaio
在某些Linux发行版上,会调用此包libaio1
。
若是计算机上没有其余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
若是您打算同定位可选的Oracle配置文件,如tnsnames.ora
,sqlnet.ora
或oraaccess.xml
与即时客户端,而后建立一个network/admin
子目录,若是它不存在。例如:
mkdir -p /opt/oracle/instantclient_12_2/network/admin
这是与此Instant Client连接的应用程序的默认Oracle配置目录。
或者,Oracle配置文件能够放在另外一个可访问的目录中。而后将环境变量 TNS_ADMIN
设置为该目录名称。
使用Oracle Instant Client RPM运行ODPI-C应用程序:
下载适用于您的应用程序架构的Oracle 18,12或11.2“Basic”或“Basic Light”RPM:64位 或32位。
使用sudo或root用户安装下载的RPM。例如:
sudo yum install oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
Yum会自动安装所需的依赖项,例如libaio
。
若是计算机上没有其余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
若是您打算共同定位可选的Oracle配置文件,例如tnsnames.ora
,sqlnet.ora
或oraaccess.xml
使用Instant Client,则network/admin
在lib/
其下建立一个子目录 (若是它不存在)。例如:
sudo mkdir -p /usr/lib/oracle/12.2/client64/lib/network/admin
这是与此Instant Client连接的应用程序的默认Oracle配置目录。
或者,Oracle配置文件能够放在另外一个可访问的目录中。而后将环境变量 TNS_ADMIN
设置为该目录名称。
ODPI-C应用程序可使用本地Oracle数据库或完整Oracle客户端安装中的Oracle Client 18,12或11.2库。
这些库必须是32位或64位,与您的应用程序和ODPI-C库(若是单首创建)匹配。
经过运行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
可选的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 18和12.2须要VS 2013
- Oracle 12.1须要VS 2010
- Oracle 11.2须要VS 2005 64位或VS 2005 32位
使用Oracle Instant Client zip文件运行ODPI-C应用程序:
下载Oracle 18,12或11.2“Basic”或“Basic Light”zip文件:64位 或32位,与您的应用程序架构相匹配。
例如,将程序包解压缩到应用程序可访问的单个目录中C:\oracle\instantclient_12_2
。
设置环境变量PATH
以包括您在步骤2中建立的路径。例如,在Windows 7上,PATH
在控制面板 - >系统 - >高级系统设置 - >高级 - >环境变量 - >系统变量 - >路径中更新。
若是您打算共同定位可选的Oracle配置文件,例如tnsnames.ora
,sqlnet.ora
或oraaccess.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库必须是32位或64位,与您的应用程序和ODPI-C库(若是单首创建)匹配。
要使用本地Oracle数据库(或完整Oracle客户端)18,12或11.2安装中的客户端库来运行ODPI-C应用程序:
设置环境变量PATH
以包含包含OCI.dll的路径(若是还没有设置)。例如,在Windows 7上, PATH
在控制面板 - >系统 - >高级系统设置 - >高级 - >环境变量 - >系统变量 - >路径中更新。
可选的Oracle配置文件,例如tnsnames.ora
, sqlnet.ora
或者oraaccess.xml
能够放在network/admin
Oracle软件的 子目录中。
或者,Oracle配置文件能够放在另外一个可访问的目录中。而后将环境变量 TNS_ADMIN
设置为该目录名称。