CentOS Version 7.6.1810, Linux version 3.10.0-957.27.2.el7.x86_64 Install Oracle Pro*C
2019/09/28 Note :
CentOS install Oracle Pro*C and connect to Oracle remote database.
這是老派的程式人員才會用到的需求,老派的程式開發人員 Survey 能力都足夠,原則上是用不到這篇文章,
所以這篇文章主要是自己的安裝使用紀錄,免得老化的頭腦忘記怎麼做...
1. 檢查 CentOS 版本
cat /etc/redhat-release
2. 檢查 Linux 版本
cat /proc/version
3. 下載 Oracle 相關套件共四個
安裝方式有兩種:
zip 檔案的安裝 與 rpm 檔案的安裝;用zip檔案安裝比較繁瑣,rpm 安裝比較簡單,所以我選用 rpm 安裝方式。
b.Oracle Instant Client sqlplus
c. Oracle Instant Client devel
d. Oracle Instant Client precomp
Oracle下載頁面網址:https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
☆上面的下載是免費的,但有些套件下載時 Oracle 會要求登入會員,所以要先有 Oracle 會員。
完成下載後,用 root 登入 CentOS,然後建立一個 Templates 目錄,接著在 Templates 下再建立一個 oracle 目錄。
目錄建立完成後,將剛剛下載的四個 Oracle 套件上傳到剛建立的目錄:
之後,就可以開始安裝四個套件,安裝指令很簡單:
rpm -i *rpm
透過上面的步驟即可完成 Oracle Pro*C 的安裝。
完成安裝後,要新增一個環境變數:
export LD_LIBRARY_PATH=/usr/lib/oracle/19.3/client64/lib
請將上述設定加到使用者的 .bash_profile 裡面...
接著就可以用 sqlplus 來連線到遠端 Oracle 資料庫,連線方式:
sqlplus 帳號/密碼@oracle_Server_位置:連接埠/資料庫名稱
連線成功將出現:
到此,Oracle Pro*C 已經完成安裝,並且能成功連線到遠端資料庫。
下面說明 Pro*C 的使用與 Compiler:
ФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФ
在 /usr/lib/oracle/19.3/client64/lib/precomp/admin 目錄下有兩個檔案,可以做 Pro*C compiler 的設定:
pcbcfg.cfg 主要是 Compiler 時的參數設定。
pcscfg.cfg 主要是 Compiler 時的環境變數設定。
兩個檔案 cat 一下就知道怎麼用,就不多說(我也不會說...XD)。
Pro*C 範例:
EXEC SQL INCLUDE sqlca;
EXEC SQL INCLUDE oraca;
EXEC ORACLE OPTION (ORACA=YES);
EXEC ORACLE OPTION (RELEASE_CURSOR=YES);
void sqlerror(char *FnName, char *sqlstr)
{
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK WORK RELEASE;
printf ("sql error,Function Name:[%s]\n", FnName);
printf ("SQL:\n[%s]", sqlstr);
printf ("error\n");
exit (0);
}
int loginDB (char *ConnectString)
{
EXEC SQL BEGIN DECLARE SECTION;
int db_status;
// char db_string[101];
EXEC SQL END DECLARE SECTION;
// memset (db_string, 0x00, sizeof
(char[101]));
//
sprintf( db_string, "scott/tiger@192.168.1.200:1521/db_name");
EXEC SQL WHENEVER SQLERROR DO sqlerror("loginDB", NULL);
// EXEC SQL CONNECT :db_string;
EXEC SQL CONNECT :ConnectString;
return(db_status);
}
int logoutDB()
{
EXEC SQL WHENEVER SQLERROR DO sqlerror("o_logoutDB", NULL);
EXEC SQL COMMIT WORK RELEASE;
return(0);
}
int ReturnInteger (char *ReadSQL)
{
EXEC SQL BEGIN DECLARE SECTION;
int Integers;
EXEC SQL END DECLARE SECTION;
EXEC SQL WHENEVER SQLERROR DO sqlerror("o_ReturnInteger", ReadSQL);
EXEC SQL PREPARE dyns1 FROM :ReadSQL;
EXEC SQL DECLARE Curs1 CURSOR FOR dyns1;
EXEC SQL OPEN Curs1;
EXEC SQL WHENEVER NOT FOUND DO break;
for ( ; ; )
EXEC SQL FETCH Curs1 INTO : Integers;
EXEC SQL CLOSE Curs1;
return Integers;
}
在 compiler link 時,要加上 -l clntsh 這個參數才會成功。
makefile 範例:
#*------------------------------------------------------------------------*
#* Mark | Date | Name | Description *
#*------+------------+---------------+------------------------------------*
#* XXXX | xxxx/xx/xx | xxxxxxxxxxxxx | *
#*------+------------+---------------+------------------------------------*
#* XXXX | xxxx/xx/xx | xxxxxxxxxxxxx | *
#**************************************************************************
COMMONPATH = /home/user/project/
LIBPATH = $(COMMONPATH)lib/
SOURCE = $(COMMONPATH)sou/
INCPATH = $(COMMONPATH)inc/
EXEPATH = $(COMMONPATH)bin/
PC=proc
PROCLIB= -L /usr/lib/oracle/19.3/client64/lib
COMMONFG=-O3 -Wall
CCFLAG=-I $(INCPATH) -g -c
LNKFLAG=-l clntsh -o
ENS=dtread
FNS=dtread
PSQL=sql
PROC_PC=p_sql
EXES=$(EXEPATH)$(ENS)
SRCS=$(FNS).c $(PROC_PC).c
OBJS=$(FNS).o $(PROC_PC).o
PROCS=$(PROC_PC).pc
.SUFFIXES: .c .o .pc
all :: $(EXES)
$(EXES) : $(OBJS)
$(CC) $(COMMONFG) $(OBJS) $(PROCLIB) $(LNKFLAG)
$(EXES)
$(OBJS) : $(SRCS)
$(CC) $(COMMONFG) $(ECPGINC) $(CCFLAG) $(SRCS)
$(SRCS) : $(PROCS)
$(PC) $(PROCS)
clean :
-rm -f $(OBJS) *.o *.log $(PROC_PC).c $(PROC_PC).lis
$(EXES)
rebuild :
make clean
make
用 Pro*C 將 Oracle 資料讀出來,用 pgsql 將資料寫入 PostgreSQL 實作: