Instant ClIEnt連接Oracle數據庫,直接連接會出現問題,必須要設置環境變量,下面就讓我們來了解一下Instant ClIEnt連接Oracle的環境變量設置方法。
最近寫個代碼用OCI在局域網內鏈接Oracle數據庫,開始天真的以為像鏈MySQL數據庫那樣簡單:下載了頭文件和庫文件開發包後就可以直接鏈接數據庫了,結果我發現我錯了,Oracle聲名在外果然不是蓋的。
首先,去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 這個則是包含的頭文件
運行程簡單的C鏈接序報錯: ORA-12541: TNS:no listener 網絡上一搜索都說是沒有配置好oracle數據庫的監聽器或者是監聽器沒有啟動,而那太oracle10g數據庫的監聽器明明啟動了,而且網內另外一太機器安裝了oracle client客戶端用sqlplus能鏈接並操作數據庫(那個標准client快500M,太肥了,不想裝),於是我也下載了sqlplus包: *Instant ClIEnt Package - SQL*Plus 配置好以後發現在終端運行sqlplus命令鏈接Oracle數據庫錯誤依舊:
ERROR:
ORA-12541: TNS:no listener
連sqlplus都報一樣的錯誤那就不是oci的問題了,是instant的環境配置問題鳥。在百度/狗狗上搜索一通,發現配置oracle的instant,要配置兩個環境變量參數:TNS_ADMIN 和 Oracle_HOME 。用export命令只對當前運行的系統有效,重啟系統後就沒了,因此要做到一次配置永久生效就要編輯 ~/.bashrc 文件,在文件末尾加上兩句:
- export TNS_ADMIN=/home/Oracle/network/admin
- export Oracle_HOME=/home/Oracle
注:Oracle_HOME 環境變量的路徑是解壓 Instant ClIEnt Package - Basic zip包的解壓路徑,路徑下包含了從Basic包裡解壓出來的so文件jar文件等。
TNS_ADMIN環境則是標識tnsnames.ora文件的路徑,在 ORACLE_HOME 路徑下新建立network文件夾,然後在network文件夾內新建admin文件夾在admin文件夾內有 tnsnames.ora 文件即可,至於為什麼TNS_ADMIN要這麼設置,oracle默認路徑的層次結構就是這樣,因此我也照抄,理論上說TNS_ADMIN 沒必要一定要在 Oracle_HOME 路徑裡面,我沒試過,誰有興趣可以去試試,我的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 和 TNS_ADMIN 兩個環境變量生效,檢查方法很簡單,分別在終端輸入命令:
- [mgqw@localhost cutest]$ echo $Oracle_HOME
- /home/Oracle
- [mgqw@localhost cutest]$ echo $TNS_ADMIN
- /home/Oracle/network/admin
如果像上面那樣有路徑輸出則說明配置成功了,如果沒有輸出那重新再編輯一下 ~/.bashrc 看看哪裡出了問題吧。
檢查完成以後運行sqlplus登錄數據庫成功,運行C程序鏈接數據庫也成功。