• 打造ubuntu下精简版的oracle客户端及pro*c编译环境


    1. oracle的pro*c简介
    2. 安装oracle客户端
    3. 安装sqlpus
    4. 安装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

    image

     

    现在开始安装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: ...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
  • 相关阅读:
    C#小数点位数处理方法
    C#获取硬盘空间信息
    Linux双网卡绑定实现负载均衡
    CentOS、Ubuntu配置网卡子接口
    CentOS7修改网卡名称,禁用ipv6
    centos命令自动补全增强
    使用批处理文件访问ORACLE数据库
    Mac 常用终端命令
    常用正则表达式
    pickle 模块
  • 原文地址:https://www.cnblogs.com/linbc/p/1518464.html
Copyright © 2020-2023  润新知