歡迎您光臨本站 註冊首頁

linux下OCI基礎:配置Instant Client連oracle資料庫

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  linux下OCI連oracle的基礎----配置Instant Client連接oracle資料庫
     
     前段時間有位兄弟在我博客上找到一篇我以前寫的用OCI鏈接oracle資料庫配置方法的帖子,因為只是隨手記錄,那篇文章裡面很多東西都沒交代清楚,我看得懂人家看起來就雲里霧裡。oracle聲名在外又不是蓋的,而那位老兄被上面逼得很急,加我qq問了我三四天總算才基本搞定OCI鏈接oralce資料庫。
    也不能怪那個老兄,不像用C連mysql很簡單,官方文檔漢化很全很詳細,市面上銷售的mysql書籍很多都有關於C連mysql資料庫的例子和相關介紹。想想當初我弄C通過OCI介面連oracle資料庫去新華書店/噹噹網把oracle有關的書籍找了個遍,全部都是介紹java,php,多奶等語言連oracle的例子介紹,僅僅只有一本《Oracle Spatial與OCI高級編程》有一些OCI的介紹,唯一的這本書對怎麼配置OCI連接環境也隻字不提。
    oracle官方文檔全英文還藏著捏著生怕別人看到,相對mysql的C詳細漢化文檔完全讓人吐血;網上搜索也基本只能搜索到windows下的配置方法,linux下基本沒有,我當時就是根據windows下配置方法和一些英文文檔一步一步弄出來的。為了不讓後來人重蹈那位老兄的覆轍,通過這篇文章,我從零開始一步一步詳細地教大家在linux下用C語言通過OCI連接oracle資料庫。
    要說明一下,oracle有對應的client客戶端安裝包,但那個標準client包不但巨肥有400多M,把七七八八的東西全加進去了,而且在linux下限制很多發版安裝不了(我記得fedora就不行)。

     
      首先,去oracle官網下載C語言的庫文件和頭文件網址如下,選擇對應的Instant Client版本(我下載的都是zip包,沒有下載rpm包,rpm包應該安裝的時候就把那些東西配置好了):
http://www.oracle.com/technology/software/tech/oci/instantclient/index.html
下面是linux i386版本的
http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html
Instant Client Package - Basic     裡面包含了動態庫文件 libclntsh.so.11.1(最新版本可能不一樣) 並將其載入到動態庫搜索路徑中去,這裡就不說詳細步驟了,有疑問百度/狗狗搜索,實在不行在下面留言。
*Instant Client Package - SDK     這個則是包含的頭文件
 *Instant Client Package - SQL*Plus   sqlplus這個東西最好還是下一個裝上,試驗客戶端是否配置好,查看sql語句執行結果都需要他。

下載文件路徑設置:
/home/oracle/lib 存放Basic和sqlplus的各種庫文件,因此在/etc/ld.so.conf文件中添加路徑/home/oracle/lib ,還有就是在當前文件下為libclntsh.so.11.1庫文件建個軟連接 ln -s libclntsh.so.11.1 libclntsh.so 讓代碼連接動態庫的時候能找到庫文件。
/home/oracle/include 存放SDK的頭文件。

    配置好以後發現在終端運行sqlplus鏈接oracle資料庫錯誤:ERROR:ORA-12541: TNS:no listener  網路上一搜索都說是沒有配置好oracle資料庫的監聽器或者是監聽器沒有啟動,而那太oracle10g資料庫的監聽器明明啟動了,而且網內另外一台windows機器安裝了oracle client客戶端用sqlplus能鏈接並操作資料庫。
  
      連sqlplus都報一樣的錯誤那就不是sqlplus或者是oci的問題了,是instant的環境配置問題鳥。在百度/狗狗上搜索一通,發現配置oracle的instant,要配置一個環境變數參數:ORACLE_HOME 。用export命令只對當前運行的系統有效,重啟系統后就沒了,因此要做到一次配置永久生效就要編輯 ~/.bashrc 文件,在文件末尾加上一句:
export ORACLE_HOME=/home/oracle/lib
註:ORACLE_HOME 環境變數的路徑是解壓 Instant Client Package - Basic zip包的解壓路徑,路徑下包含了從Basic包里解壓出來的so文件jar文件等。
    最後在 $ORACLE_HOME/network/admin 目錄(沒有就新建)下新建一個oracle配置文件tnsnames.ora文件 ,我的tnsnames.ora是從其他機器上直接拷過來的,內容如下:

# tnsnames.ora Network Configuration File: /home/oracle/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora
TEST =
(DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.8)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test)
    )
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
)


    配置好上面這些后,註銷用戶重新登錄,讓 ORACLE_HOME環境變數生效,檢查方法很簡單,分別在終端輸入命令:
[mgqw@localhost ~]$ echo $ORACLE_HOME
/home/oracle
如果像上面那樣有路徑輸出則說明配置成功了,如果沒有輸出那重新再編輯一下 ~/.bashrc 看看哪裡出了問題吧。


      檢查完成以後運行sqlplus登錄資料庫成功!例子如下,運行C程序鏈接資料庫也成功!總算把環境配好了。

[mgqw@localhost ~]$ sqlplus uname/pswd@dbname

SQL*Plus: Release 11.1.0.7.0 - Production on Sun May 31 14:22:00 2009

Copyright (c) 1982, 2008, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options

SQL> select * from t1;

     A        B
---------- ----------
     0        3
     2        3
    20        3
    21        3
     8        1
     9        1
    30       32
    -1        2
     1        4
     3        6
     5        8

     A        B
---------- ----------
     7       10
    22        2
    26        2

14 rows selected.


下面補償一點配置文件說明:
tnsnames.ora文件放在客戶端機器上,並且在默認狀態下存儲在ORACLE_HOME/network/admin目錄中。 sqlnet.ora文件控制著客戶端Oracle Net Services的行為,例如跟蹤級別和會話特性。我們已經知道了listener.ora和init.ora文件的用途和位置。
從根本上講,當客戶發出請求時,通過使用tnsnames.ora文件首先解析Oracle Net Services的名稱。tnsnames.ora文件中的參數將該請求指引到適當的資料庫節點。監聽器進程監聽客戶請求,並且將其與一個伺服器進程相連接。該請求將被處理,其結果被返回到客戶端機器。

linuxOCIoracleInstant Client


[火星人 ] linux下OCI基礎:配置Instant Client連oracle資料庫已經有965次圍觀

http://coctec.com/docs/linux/show-post-74088.html