Linux下运行OCCI程序报Error while trying to retrieve text for error

Linux 下运行OCCI程序,一直报如下错误:Exception: Code – 1804, Message – Error while trying to retrieve text for error ORA-01804之前也遇到了该错误,当时解决办法是配置 Oracle_HOME 环境变量。

(一) 安装Oracle Instant Client

这次我使用的是 Oracle Instant Client 11.2.0.1.0 ,下载地址:可以下载rpm包或者zip包进行安装.

(1) rpm 包

若下载的是Version 11.2.0.1.0 版本的 rpm 包,,oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpmoracle-instantclient11.2-sqlplus-11.2.0.1.0-1.x86_64.rpmoracle-instantclient11.2-devel-11.2.0.1.0-1.x86_64.rpm使用如下命令进行安装rpm -ivh oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpmrpm -ivh oracle-instantclient11.2-sqlplus-11.2.0.1.0-1.x86_64.rpmrpm -ivh oracle-instantclient11.2-devel-11.2.0.1.0-1.x86_64.rpm安装完成后,ORACLE Instant Client 相关的头文件在 /usr/include/oracle/11.2/client64/下(sdk包中的),库文件在 /usr/lib/oracle/11.2/client64/下(cliient64目录下有 lib 和 bin两个目录.){sqlplus相关的配置在 (2) 中说明 }配置如下环境变量: ~/.bashrcexport ORACLE_HOME=/usr/lib/oracle/11.2/client64export TNS_ADMIN=$ORACLE_HOME/network/adminexport NLS_LANG=’simplified chinese_china’.ZHS16GBKexport LD_LIBRARY_PATH=$ORACLE_HOME/libexport PATH=$ORACLE_HOME/bin:$PATH

(2) zip 包若下载的是Version 11.2.0.1.0 版本的 zip 包,则下载如下三个包oracle-instantclient11.2-sdk-11.2.0.1.0-1.x86_64.ziporacle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.zip oracle-instantclient11.2-sqlplus-11.2.0.1.0-1.x86_64.zip使用如下命令进行解压安装unzip oracle-instantclient11.2-sdk-11.2.0.1.0-1.x86_64.zipunzip oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.zip unzip oracle-instantclient11.2-sqlplus-11.2.0.1.0-1.x86_64.zip例如最后解压到目录 /opt/oracle_instant_client/instantclient_11_2 下,目录下的文件和目录如下[root@localhost instantclient_11_2]# lsadrci genezi libclntsh.so.11.1 libocci.so.11.1 libocijdbc11.so libsqlplus.so ojdbc5.jarsdkSQLPLUS_README xstreams.jarBASIC_README glogin.sql libnnz11.so libociei.solibsqlplusic.sonetworkojdbc6.jar sqlplus sqlplus.sh{ 头文件在 sdk/include下,库文件在instantclient_11_2目录下 }{ network/admin目录是我自己创建的,用于sqlplus连接数据库,目录下有一个文件 tnsnames.ora,配置了数据库连接,文件内容如下:ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.232.131)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )ORCL_XP = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.232.133)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) )}

配置如下环境变量: ~/.bashrcexportexport ORACLE_HOME=/opt/oracle_instant_client/instantclient_11_2export TNS_ADMIN=$ORACLE_HOME/network/adminexportexport NLS_LANG=’simplified chinese_china’.ZHS16GBKexportexport LD_LIBRARY_PATH=$ORACLE_HOMEexport PATH=$ORACLE_HOME:$PATH配置完毕后, source ~/.bashrc执行 sqlplus 命令即可连接数据库进行操作,例如:sqlplus /nologconn scott/tiger@orcl安装完毕!(二)编译OCCI程序编译OCCI程序可以使用两种方式:(1) 方法一:使用 Oracle 11.2.0.1 数据库软件中自带的 OCCI 相关库和头文件.在一个安装好Oracle 11.2.0.1 R2 数据库的机器上拷贝occi相关头文件和库文件到目录 /opt/OCCI_11g_R2/include 和 /opt/OCCI_11g_R2/lib 下,头文件:mkdir /opt/OCCI_11g_R2/includecp -r /sdd1/oracle/11gR2_database_X64/product/11.2.0.1.0/db_1/rdbms/public/* /opt/OCCI_11g_R2/include/库文件:mkdir /opt/OCCI_11g_R2/libcp /sdd1/oracle/11gR2_database_X64/product/11.2.0.1.0/db_1/lib/libclntsh.so.11.1 /opt/OCCI_11g_R2/lib/cp /sdd1/oracle/11gR2_database_X64/product/11.2.0.1.0/db_1/lib/libocci.so.11.1 /opt/OCCI_11g_R2/lib/cp /sdd1/oracle/11gR2_database_X64/product/11.2.0.1.0/db_1/libocci11.a /opt/OCCI_11g_R2/lib/cp /sdd1/oracle/11gR2_database_X64/product/11.2.0.1.0/db_1/libnnz11.so /opt/OCCI_11g_R2/lib/cp /sdd1/oracle/11gR2_database_X64/product/11.2.0.1.0/db_1/libnnz11.a /opt/OCCI_11g_R2/lib/cd /opt/OCCI_11g_R2/lib创建3个软链接ln -s libocci.so.11.1 libocci.soln -s libclntsh.so.11.1 libclntsh.soln -s libclntsh.so libclntsh.so.10.1 [root@localhost lib]# ll总计 69764lrwxrwxrwx 1 root root 17 01-07 13:33 libclntsh.so -> libclntsh.so.11.1lrwxrwxrwx 1 root root 12 01-07 13:33 libclntsh.so.10.1 -> libclntsh.so-rwxr-xr-x 1 root root 48724689 01-07 12:58 libclntsh.so.11.1-rw-r–r– 1 root root 11595642 2012-01-07 libnnz11.a-rw-r–r– 1 root root 7899997 2012-01-07 libnnz11.so-rw-r–r– 1 root root 1863334 01-07 12:50 libocci11.alrwxrwxrwx 1 root root 15 01-07 13:33 libocci.so -> libocci.so.11.1-rwxr-xr-x 1 root root 1260923 01-07 12:50 libocci.so.11.1编译OCCI程序时使用如下选项:OCCI_HOME=/opt/OCCI_11g_R2OCCI_INCLUDE_DIR=$(OCCI_HOME)/includeOCCI_LIBRARY_PATH=$(OCCI_HOME)/libg++ *.cpp -I$(OCCI_INCLUDE_DIR) -L$(OCCI_LIBRARY_PATH) -locci -lclntsh -lnnz11编译成功!(2) 方法二:使用 Oracle Instant Client 11.2.0.1.0 sdk来编译程序

OCCI_INCLUDE_DIR=/usr/include/oracle/11.2/client64OCCI_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/libg++ *.cpp -I$(OCCI_INCLUDE_DIR) -L$(OCCI_LIBRARY_PATH) -locci -lclntsh -lnnz11编译成功!

(三)运行OCCI程序

运行OCCI程序必须安装 ORACLE INSTANT CLIENT,并配置 ORACLE_HOME 环境变量!以上两种方式安装的 Oracle Instant Client 均可以。export LD_LIBRARY_PATH=/opt/OCCI_11g_R2/lib:$LD_LIBRARY_PATH./a.out执行脚本运行程序,当连接数据库时,一直报错误: Error while trying to retrieve text for error ORA-01804。弄了半天,最后注释掉 export LD_LIBRARY_PATH=/opt/OCCI_11g_R2/lib:$LD_LIBRARY_PATH,即直接使用之前配置的 LD_LIBRARY_PATH 执行程序,问题解决!所以,这里是 LD_LIBRARY_PATH 变量的问题。

获致幸福的不二法门是珍视你所拥有的遗忘你所没有的。

Linux下运行OCCI程序报Error while trying to retrieve text for error

相关文章:

你感兴趣的文章:

标签云: