Oracle調用接口(Oracle Call Interface,簡稱OCI)提供了一組可對Oracle數據庫進行存取的接口子例程(函數),通過在第三代程序設計語言(如C語言)中進行調用可達到存取Oracle數據庫的目的。
1、Oracle客戶端
因為需要使用ocilib來操作部署在其他電腦上的數據庫,需要安裝Oracle客戶端;注意,無需下載完整的Oracle客戶端,下載安裝oracle-instantclient(即時客戶端)即可,官網下載地址是:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html 。有很多類型的包可供下載,每種包又分為.zip和.rpm兩種格式,zip包相當於解壓后免安裝版,rpm包需要安裝。下載的版本要對應你所連接的數據庫的具體版本及位數,如我要連接的數據庫的版本信息是:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 -64bit Production
所以我選擇64位的11.2.0.4.0版本來下載。下面以rpm格式包安裝配置來詳細展開。
1)要遠程連接Oracle數據庫,且要使用ocilib來操作數據庫,則至少需要下載以下三個包:
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
其中
basic是基礎包,使用其的目的是運行OCI、OCCI、JDBC-OCI這幾個應用程序;
sqlplus是補充包/文件,目的是運行sql*plus的即時客戶端;
devel等同於oracle-sdk,包含頭文件和示例文件,目的是開發Oracle應用程序;
以上三個千萬不要少。
其余的可選的還有:
oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm --補充包/文件,為運行ODBC環境附加庫; oracle-instantclient11.2-jdbc-11.2.0.4.0-1.x86_64.rpm --補充JDBC下的XA、國際標准、行集操作;
2)使用rpm -ivh [包名]進行安裝,
如:
rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
安裝的文件默認放在兩個位置:
頭文件:/usr/include/oracle/11.2/client64/下,如果在使用時報錯找不到頭文件,記得看路徑是否是這個。
包文件:/usr/lib/oracle/11.2/client64/下,包含{bin、lib}兩個文件夾。
3)創建文件夾:#mkdir -p /usr/lib/oracle/11.2/client64/network/admin/
4)創建監聽文件,並添加內容:#vi /usr/lib/oracle/11.2/client64/network/admin/tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 200.31.157.65)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = *SID*)
)
)
5)配置環境變量
vi ~/.bashrc #該種方法把使用這些環境變量的權限控制到用戶級別,即針對某一特定的用戶,如果你需要給某個用戶權限使用這些環境變量,你只需要修改其個人主目錄下的.bashrc文件就可以了。 export ORACLE_HOME=/usr/lib/oracle/11.2/client64 export TNS_ADMIN=$ORACLE_HOME/network/admin export NLS_LANG='simplified chinese_china'.ZHS16GBK export LD_LIBRARY_PATH=$ORACLE_HOME/lib export PATH=$ORACLE_HOME/bin:$PATH
6)使配置完的環境變量生效 :#source ~/.bashrc
7)連接數據庫測試:#sqlplus /nolog
2、安裝配置OCI
1)下載地址:http://vrogier.github.io/ocilib/
2)配置環境變量:vi ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
因為前面已配置了oracle的鏈接庫路徑,執行前,LD_LIBRARY_PATH=:/usr/lib/oracle/11.2/client64/lib;
執行上述語句后,LD_LIBRARY_PATH=:/usr/lib/oracle/11.2/client64/lib:/usr/local/lib;
2)解壓ocilib
tar -xzvf ocilib-4.3.3-gnu.tar.gz
3)進入該目錄:cd ocilib-4.3.3;然后./configure進行配置(./configure是用來生成Makefile,為下一步的編譯做准備,--with用於指定ocilib所需的頭文件和庫文件位置)
./configure --with-oracle-lib-path=/usr/lib/oracle/11.2/client64/lib --with-oracle-headers-path=/usr/include/oracle/11.2/client64
4)make
make是用來編譯,它從Makefile中讀取指令,然后編譯。
5)make install
make install是用來安裝的,它從Makefile中讀取指令,安裝到指定的位置。
3、成功后示例
1)代碼:
#include "ocilib.h" #include <stdio.h> int main() { OCI_Connection * cn = NULL; if ( !OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT) ) { return -1; } cn = OCI_ConnectionCreate("192.168.1.218:1521/orcl","hr", "hr", OCI_SESSION_DEFAULT); if ( cn != NULL ) { printf("%s\n", OCI_GetVersionServer(cn)); OCI_ConnectionFree(cn); } OCI_Cleanup(); return 0; }
2)編譯
gcc ocitest.c -locilib
3)執行
4)注意事項
安裝完寫demo的時候,出現:
是因為LD_LIBRARY_PATH沒配置正確,在執行a.out時,找不到動態庫,需參照前面的步驟完成配置。