打造ubuntu下精简版的oracle客户端及pro*c编译环境
时间:2016-11-12 22:53 来源:linux.it.net.cn 作者:IT
-
oracle的pro*c简介
-
安装oracle客户端
-
安装sqlpus
-
安装pro*c
ORACLE的PRO*C曾经很流行,虽然现在不被推崇,但是已经比较成熟项目依然使用,所以打造自己的pro*c编译环境还是有意义的。现在网上搜一下,可能还可以找得到windows下面的pro*c编译环境,但是linux下基本上没有,当然你愿意啃E文的话,可能还是有一些的,但是大部分都只能通过介绍oracle 9i的安装来获得我们需要的pro*c编译环境,如果只是单纯想安装pro*c,那是没有的,所以才想到写下来记录一下。
在linux安装orace 9i是很麻烦的事情,首先,按照官方的说法,oracle是只支持red hat的,虽然服务器大部分都是,但我想作为开发人员,肯定用的发行版都是五花八门了。总体而言,在ubuntu下安装oracle9i主要存在这几点麻烦:1.需要打补丁,而且补丁也难下;2.安装时中文不支持;3.为了这个功能要装这个庞然大物;4.部分动态链接库很老的版本不好找;5.oracle9i的安装光盘实在不好拿到;6.安装时间好长。
首先,当然是到oracle的网站下载文件了,下面是地址http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html。我们主要要安装这几个,oracle精简客户端,sqlplus以及pro*c。所以要分别下载这几个文件instantclient-basic-linux32-11.1.0.7.zip,instantclient-sqlplus-linux32-11.1.0.7.zip,instantclient-precomp-linux32-11.1.0.7.zip。
现在安装oracle精简客户端及sqlplus。首先创建目录并解压文件,如下:
$ cd /opt
$ sudo mkdir oracle
$ unzip instantclient-basic-linux32-11.1.0.7.zip
$ unzip instantclient-sqlplus-linux32-11.1.0.7.zip
编辑一下主目录下.bash_profile设置几个环境变量
export ORACLE_HOME=$ORACLE_BASE/instantclient_11_1
export LD_LIBRARY_PATH=$ORACLE_HOME:${LD_LIBRARY_PATH}
export PATH=$ORACLE_HOME:$ORACLE_HOME/sdk:$PATH
export NLS_LANG=AMERICAN_AMERICA.UTF8
将找个要用的服务名tnsnames.ora拷到相应路径下,像我的是/opt/oracle/instantclient_11_1/network/admin,没有目录则新建
加载一下环境变量
$. ~/.bash_profile
还要安装一下aio库还要将oracle的路径加进ld.conf
$sudo apt-get install libaio1
$sudo vi /etc/ld.so.conf.d/ora.conf
/opt/oracle/instantclient_11_1/
更新一下
$ldconfig -v
应该可以了
$sqlplus user@service_name/password
现在开始安装pro*c了。
将instantclient-precomp-linux32-11.1.0.7.zip解压到$ORACLE_HOME
并在该目录下新建子目录precomp/admin,移动pcscfg.cfg到该目录下并编辑相应的头文件位置
sys_include=(/opt/oracle/instantclient_11_1/sdk/include,/usr/include,/usr/include/linux)
ltype=short
再新建子目录lib
$sudo mkdir lib
$cd lib
$sudo ln -s libclntsh.so /opt/oracle/instantclient_11_1/libclntsh.so.11.1
写个helloworld验证一下我们的pro*c能不能用了。。
#include <stdio.h>
#include <stdlib.h>
EXEC SQL INCLUDE sqlca;
EXEC SQL INCLUDE oraca;
EXEC ORACLE OPTION(ORACA=YES);
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR v_username[20];
VARCHAR v_password[20];
EXEC SQL END DECLARE SECTION;
void sqlerror();
int main(){
v_username.len = sprintf(v_username.arr,"tpibs@ywdev");
v_password.len = sprintf(v_password.arr,"tppw123");
EXEC SQL WHENEVER SQLERROR DO sqlerror();
EXEC SQL CONNECT :v_username IDENTIFIED BY :v_password;
printf("\nconn ORACLE ,user:%s\n",v_username.arr);
EXEC SQL COMMIT WORK RELEASE;
return 0;
}
void sqlerror(){
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("\nORACLE error detected:\n");
printf("\n%.70s\n",sqlca.sqlerrm.sqlerrmc);
Exec sql rollback RELEASE;
}
再写个简单的makefile
TARGET = hello
SRCS = main.c
OBJS = main.o
COMMLIB = -lpthread -lclntsh
LINKER = $(CC)
RM = /bin/rm -f
PROC = proc
PROCFLAGS = code=ANSI_C ireclen=2048 oreclen=2048 parse=none include=/usr/include\
include=/usr/include/linux\
include=/usr/local/include\
include=/usr/lib/gcc/i486-linux-gnu/4.3.3/include
CFLAGS = -I$(ORACLE_HOME)/precomp/public\
-L$(ORACLE_HOME)/lib
.SUFFIXES: .o .c .pc
.c.o:
$(CC) -c $(CFLAGS) $<
.pc.c:
@echo "PROC ."
-$(PROC) iname=$*.pc $(PROCFLAGS)
$(TARGET): $(SRCS) $(OBJS)
$(CC) -o $@ $(OBJS) $(CFLAGS) $(COMMLIB)
clean :
$(RM) $(TARGET) $(OBJS) $(TARGET:%=%.c)
$ make
$ ./hello
conn ORACLE ,user:tpibs@ywdev
(责任编辑:IT)
ORACLE的PRO*C曾经很流行,虽然现在不被推崇,但是已经比较成熟项目依然使用,所以打造自己的pro*c编译环境还是有意义的。现在网上搜一下,可能还可以找得到windows下面的pro*c编译环境,但是linux下基本上没有,当然你愿意啃E文的话,可能还是有一些的,但是大部分都只能通过介绍oracle 9i的安装来获得我们需要的pro*c编译环境,如果只是单纯想安装pro*c,那是没有的,所以才想到写下来记录一下。 在linux安装orace 9i是很麻烦的事情,首先,按照官方的说法,oracle是只支持red hat的,虽然服务器大部分都是,但我想作为开发人员,肯定用的发行版都是五花八门了。总体而言,在ubuntu下安装oracle9i主要存在这几点麻烦:1.需要打补丁,而且补丁也难下;2.安装时中文不支持;3.为了这个功能要装这个庞然大物;4.部分动态链接库很老的版本不好找;5.oracle9i的安装光盘实在不好拿到;6.安装时间好长。 首先,当然是到oracle的网站下载文件了,下面是地址http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html。我们主要要安装这几个,oracle精简客户端,sqlplus以及pro*c。所以要分别下载这几个文件instantclient-basic-linux32-11.1.0.7.zip,instantclient-sqlplus-linux32-11.1.0.7.zip,instantclient-precomp-linux32-11.1.0.7.zip。 现在安装oracle精简客户端及sqlplus。首先创建目录并解压文件,如下:
$ cd /opt 编辑一下主目录下.bash_profile设置几个环境变量
export ORACLE_HOME=$ORACLE_BASE/instantclient_11_1 将找个要用的服务名tnsnames.ora拷到相应路径下,像我的是/opt/oracle/instantclient_11_1/network/admin,没有目录则新建 加载一下环境变量 $. ~/.bash_profile 还要安装一下aio库还要将oracle的路径加进ld.conf $sudo apt-get install libaio1 $sudo vi /etc/ld.so.conf.d/ora.conf /opt/oracle/instantclient_11_1/ 更新一下 $ldconfig -v 应该可以了 $sqlplus user@service_name/password
现在开始安装pro*c了。 将instantclient-precomp-linux32-11.1.0.7.zip解压到$ORACLE_HOME 并在该目录下新建子目录precomp/admin,移动pcscfg.cfg到该目录下并编辑相应的头文件位置
sys_include=(/opt/oracle/instantclient_11_1/sdk/include,/usr/include,/usr/include/linux) 再新建子目录lib $sudo mkdir lib $cd lib $sudo ln -s libclntsh.so /opt/oracle/instantclient_11_1/libclntsh.so.11.1 写个helloworld验证一下我们的pro*c能不能用了。。
#include <stdio.h>
#include <stdlib.h> EXEC SQL INCLUDE sqlca; EXEC SQL INCLUDE oraca; EXEC ORACLE OPTION(ORACA=YES); EXEC SQL BEGIN DECLARE SECTION; VARCHAR v_username[20]; VARCHAR v_password[20]; EXEC SQL END DECLARE SECTION; void sqlerror(); int main(){ v_username.len = sprintf(v_username.arr,"tpibs@ywdev"); v_password.len = sprintf(v_password.arr,"tppw123"); EXEC SQL WHENEVER SQLERROR DO sqlerror(); EXEC SQL CONNECT :v_username IDENTIFIED BY :v_password; printf("\nconn ORACLE ,user:%s\n",v_username.arr); EXEC SQL COMMIT WORK RELEASE; return 0; } void sqlerror(){ EXEC SQL WHENEVER SQLERROR CONTINUE; printf("\nORACLE error detected:\n"); printf("\n%.70s\n",sqlca.sqlerrm.sqlerrmc); Exec sql rollback RELEASE; } 再写个简单的makefile
TARGET = hello
SRCS = main.c OBJS = main.o COMMLIB = -lpthread -lclntsh LINKER = $(CC) RM = /bin/rm -f PROC = proc PROCFLAGS = code=ANSI_C ireclen=2048 oreclen=2048 parse=none include=/usr/include\ include=/usr/include/linux\ include=/usr/local/include\ include=/usr/lib/gcc/i486-linux-gnu/4.3.3/include CFLAGS = -I$(ORACLE_HOME)/precomp/public\ -L$(ORACLE_HOME)/lib .SUFFIXES: .o .c .pc .c.o: $(CC) -c $(CFLAGS) $< .pc.c: @echo "PROC ." -$(PROC) iname=$*.pc $(PROCFLAGS) $(TARGET): $(SRCS) $(OBJS) $(CC) -o $@ $(OBJS) $(CFLAGS) $(COMMLIB) clean : $(RM) $(TARGET) $(OBJS) $(TARGET:%=%.c)
$ make
$ ./hello conn ORACLE ,user:tpibs@ywdev (责任编辑:IT) |