Oracle调用接口(Oracle Call Interface,简称OCI)提供了一组可对Oracle数据库进行存取的接口子例程(函数),通过在第三代程序设计语言(如C语言)中进行调用可达到存取Oracle数据库的目的。

1、Oracle客户端

因为需要使用ocilib来操作部署在其他电脑上的数据库,需要安装Oracle客户端;注意,无需下载完整的Oracle客户端,下载安装oracle-instantclient(即时客户端)即可,官网下载地址是:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html 。有很多类型的包可供下载,每种包又分为.zip和.rpm两种格式,zip包相当于解压后免安装版,rpm包需要安装。下载的版本要对应你所连接的数据库的具体版本及位数,如我要连接的数据库的版本信息是:

Oracle Database 11g Enterprise Edition Release 11.2.0.4. -64bit Production

所以我选择64位的11.2.0.4.0版本来下载。下面以rpm格式包安装配置来详细展开。

1)要远程连接Oracle数据库,且要使用ocilib来操作数据库,则至少需要下载以下三个包:

oracle-instantclient11.-basic-11.2.0.4.-.x86_64.rpm
oracle-instantclient11.-devel-11.2.0.4.-.x86_64.rpm 
oracle-instantclient11.-sqlplus-11.2.0.4.-.x86_64.rpm

其中

  basic是基础包,使用其的目的是运行OCI、OCCI、JDBC-OCI这几个应用程序;

  sqlplus是补充包/文件,目的是运行sql*plus的即时客户端;

  devel等同于oracle-sdk,包含头文件和示例文件,目的是开发Oracle应用程序;

以上三个千万不要少。

其余的可选的还有:

oracle-instantclient11.-odbc-11.2.0.4.-.x86_64.rpm  --补充包/文件,为运行ODBC环境附加库;
oracle-instantclient11.-jdbc-11.2.0.4.-.x86_64.rpm --补充JDBC下的XA、国际标准、行集操作;

2)使用rpm -ivh [包名]进行安装,

如:

rpm -ivh oracle-instantclient11.-basic-11.2.0.4.-.x86_64.rpm

安装的文件默认放在两个位置:

头文件:/usr/include/oracle/11.2/client64/下,如果在使用时报错找不到头文件,记得看路径是否是这个。

包文件:/usr/lib/oracle/11.2/client64/下,包含{bin、lib}两个文件夹。

3)创建文件夹:#mkdir -p /usr/lib/oracle/11.2/client64/network/admin/

4)创建监听文件,并添加内容:#vi /usr/lib/oracle/11.2/client64/network/admin/tnsnames.ora

ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 200.31.157.65)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = *SID*)
)
)

5)配置环境变量

vi ~/.bashrc
#该种方法把使用这些环境变量的权限控制到用户级别,即针对某一特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人主目录下的.bashrc文件就可以了。 export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG='simplified chinese_china'.ZHS16GBK
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH

6)使配置完的环境变量生效 :#source ~/.bashrc

7)连接数据库测试:#sqlplus /nolog

2、安装配置OCI

1)下载地址:http://vrogier.github.io/ocilib/

2)配置环境变量:vi ~/.bashrc

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

因为前面已配置了oracle的链接库路径,执行前,LD_LIBRARY_PATH=:/usr/lib/oracle/11.2/client64/lib;

执行上述语句后,LD_LIBRARY_PATH=:/usr/lib/oracle/11.2/client64/lib:/usr/local/lib;

2)解压ocilib

tar -xzvf ocilib-4.3.-gnu.tar.gz

3)进入该目录:cd ocilib-4.3.3;然后./configure进行配置(./configure是用来生成Makefile,为下一步的编译做准备,--with用于指定ocilib所需的头文件和库文件位置)

./configure --with-oracle-lib-path=/usr/lib/oracle/11.2/client64/lib --with-oracle-headers-path=/usr/include/oracle/11.2/client64

4)make

make是用来编译,它从Makefile中读取指令,然后编译。

5)make install

make install是用来安装的,它从Makefile中读取指令,安装到指定的位置。

3、成功后示例

1)代码:

#include "ocilib.h"
#include <stdio.h> int main()
{
OCI_Connection * cn = NULL; if ( !OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT) )
{
return -;
} cn = OCI_ConnectionCreate("192.168.1.218:1521/orcl","hr", "hr", OCI_SESSION_DEFAULT);
if ( cn != NULL )
{
printf("%s\n", OCI_GetVersionServer(cn)); OCI_ConnectionFree(cn);
} OCI_Cleanup(); return ;
}

2)编译

gcc ocitest.c -locilib

3)执行

4)注意事项

安装完写demo的时候,出现:

是因为LD_LIBRARY_PATH没配置正确,在执行a.out时,找不到动态库,需参照前面的步骤完成配置。

Linux中OCI开发库的配置的更多相关文章

  1. Linux中的动态库和静态库(.a/.la/.so/.o)

    Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...

  2. 在Linux中创建静态库.a和动态库.so

    转自:http://www.cnblogs.com/laojie4321/archive/2012/03/28/2421056.html 在Linux中创建静态库.a和动态库.so 我们通常把一些公用 ...

  3. Linux中环境变量文件及配置

    Linux中环境变量文件及配置   一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统 ...

  4. 在Linux中创建静态库和动态库

    我们通常把一些公用函数制作成函数库,供其它程序使用. 函数库分为静态库和动态库两种. 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库. 动态库在程序编译时并不会被连接到目标代码中 ...

  5. Linux学习笔记7——linux中的静态库和动态库

    一.静态库的编译 静态库的编译过程如下: 1.编译成目标文件 这里有一个可选项-static,调用格式:gcc -c -static 代码文件名.c 2.归档成静态库 A.归档的工具是ar工具,使用a ...

  6. 在Linux中创建静态库和动态库 (转)

    我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库两种.静态 库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不会被连接到目标代码中,而 ...

  7. linux 中 eclipse 开发 c/c++ 多线程程序,添加 libpthread.a 库支持

    导入头文件 在 linux 中开发多线程程序,在使用到 pthread 系列函数的文件中,需要导入头文件: #include <pthread.h> 链接 libpthread.a 在编译 ...

  8. Linux中的静态库与动态库

    什么是库文件? 库文件是事先编译好的方法的合集.比如:我们提前写好一些数据公式的实现,将其打包成库文件,以后使用只需要库文件就可以,不需要重新编写. Linux系统中: 1.静态库的扩展名为.a:2. ...

  9. Linux安装LAMP开发环境及配置文件管理

    Linux主要分为两大系发行版,分别是RedHat和Debian,lamp环境的安装和配置也会有所不同,所以分别以CentOS 7.1和Ubuntu 14.04做为主机(L) Linux下安装软件,最 ...

随机推荐

  1. 设计模式---接口隔离模式之中介者模式(Mediator)

    一:概念 在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互.Mediator对象起到控制器的作用 二:动机 在软件构建的过程中, ...

  2. HDU - 1255 覆盖的面积 (线段树求面积交)

    https://cn.vjudge.net/problem/HDU-1255 题意 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 分析 求面积并的题:https://www.cnbl ...

  3. 转载 --- SKLearn中预测准确率函数介绍

    混淆矩阵 confusion_matrix 下面将一一给出'tp','fp','fn'的具体含义: 准确率: 所有识别为"1"的数据中,正确的比率是多少. 如识别出来100个结果是 ...

  4. HTTP status constants

    HTTP status constants value = ngx.HTTP_CONTINUE (100) (first added in the v0.9.20 release) value = n ...

  5. python模块之collections random

    collections 在内置数据类型(list, dict, tuple, set)的基础上,collections提供了几个额外的数据类型: Counter, deque, Orderdict, ...

  6. tomcat自动重新加载应用

    前言 当应用配置文件发生变化时,无需重启tomcat,可以使tomcat重新加载应用. 场景 假设存在一个J2EE应用A,对应war文件名称为A.war,部署在tomcat的webapps目录下,即: ...

  7. 1、PHP入门二维数组与循环

    <?php $two=array(array(2,3),1=>array(1,2,3),2=>array(4,5,6)); echo $two[1][0];//输出1 echo $t ...

  8. IDAPython脚本之收集函数的调用信息

    转载:All Right 当我们要寻找软件漏洞 bug 的时候,或者做恶意代码分析的时候,首先会找一些常用的而且容易被错误使用的函数.但是有时候程序代码太多找的比较辛苦,并且费时间.所以我们可以写一个 ...

  9. 【C++】reference parameter-引用参数

    1.reference parameter 以下两个函数等效,只调用方式不同: 1> 1 int reset(int i){ 2 i = 13; 3 return i; 4 } 5 6 int ...

  10. kettle中的合并记录使用记录

    注意:合并记录的使用前提是2个数据源都按比较关键字排过序,否则合并之后的数据不准确,可能会多出很多. 该步骤用于将两个不同来源的数据合并,这两个来源的数据分别为旧数据和新数据,该步骤将旧数据和新数据按 ...