Linux下不安装Oracle客户端使用OCCI操作远程Oracle数据库

时间:2022-03-10 00:27:59

步骤如下:

// 

// 1. 从安装好的 Oracle 11g R2 for X64 Linux 上复制OCCI头文件和库文件:
// (1). 复制头文件
//    mkdir -p ~/OCCI-11gR2-X64/include
//    cp $ORACLE_HOME/rdbms/public/* ~/OCCI/include/
//
// (2). 复制库文件并建立软链接
//   mkdir -p ~/OCCI-11gR2-X64/lib;
//   cp $ORACLE_HOME/lib/libocci.so.11.1 ~/OCCI-11gR2-X64/lib/
//   cp $ORACLE_HOME/lib/libclntsh.so.11.1 ~/OCCI-11gR2-X64/lib/
//   cp $ORACLE_HOME/lib/libocci11.a ~/OCCI-11gR2-X64/lib/
//   cp $ORACLE_HOME/lib/libclntst11.a ~/OCCI-11gR2-X64/lib/
//   cp $ORACLE_HOME/lib/libnnz11.so ~/OCCI-11gR2-X64/lib/ <这个库也必须拷贝, 它是libclntsh.so.11.1所依赖的>
//   cd ~/OCCI/lib;
//   ln -s libclntsh.so.11.1 libclntsh.so;
//   ln -s libclntsh.so libclntsh.so.10.1 
//   ln -s libocci.so.11.1 libocci.so
// 
// (3). OCCI-11gR2-X64/lib 目录结构如下
/*
[oracle@gd47 lib]$ ls -l
总计 58424
lrwxrwxrwx 1 oracle oinstall       17 12-07 20:50 libclntsh.so -> libclntsh.so.11.1
lrwxrwxrwx 1 oracle oinstall       12 12-07 20:51 libclntsh.so.10.1 -> libclntsh.so
-rwxr-xr-x 1 oracle oinstall 48725793 12-07 20:46 libclntsh.so.11.1
-rw-r--r-- 1 oracle oinstall        0 12-07 20:46 libclntst11.a
-rw-r--r-- 1 oracle oinstall  7899997 12-07 21:12 libnnz11.so
-rw-r--r-- 1 oracle oinstall  1863334 12-07 20:45 libocci11.a
lrwxrwxrwx 1 oracle oinstall       15 12-07 20:49 libocci.so -> libocci.so.11.1
-rwxr-xr-x 1 oracle oinstall  1260923 12-07 20:45 libocci.so.11.1
*/

//

// 2. 将 OCCI-11gR2-X64 目录打包成 OCCI-11gR2-X64.tar.gz (下载),拷贝到客户机器上.

//

// 3. 客户机器上解压 OCCI-11gR2-X64.tar.gz,例如目录结构为:/home/zhankunlin/oracle/OCCI-11gR2-X64
//
// 4. 客户机器上编译OCCI程序,Makefile 可以按如下方式写
//
/*
OCCI_HOME=/home/zhankunlin/oracle/OCCI-11gR2-X64
OCCI_INCLUDE_DIR=$(OCCI_HOME)/include
OCCI_LIBRARY_PATH=$(OCCI_HOME)/lib
# Attention: You must add "-lnnz11".
cppOracle:
        g++ cppOrcl.cpp -o test -I$(OCCI_INCLUDE_DIR) -L$(OCCI_LIBRARY_PATH) -locci -lclntsh -lnnz11  <注意,必须加上 lnnz11链接libnnz11.so>
*/

//
// 5. 运行,首先设置 LD_LIBRARY_PATH 环境变量,然后执行程序
//
export LD_LIBRARY_PATH=/home/zhankunlin/oracle/OCCI-11gR2-X64/lib

./test

注意:

尽管编译没有问题,但是发现运行时有问题,报出异常错误,

Error while trying to retrieve text for error ORA-01804

可能与 Linux下非Oracle数据库安装用户执行OCCI程序  提到的问题有关。