打造ubuntu下精簡版的oracle用戶端及pro*c編譯環境

來源:互聯網
上載者:User
  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

 

現在開始安裝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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.