Instant Client連接oracle的環(huán)境變量設置
Instant Client連接oracle數(shù)據(jù)庫,直接連接會出現(xiàn)問題,必須要設置環(huán)境變量,下面就讓我們來了解一下Instant Client連接oracle的環(huán)境變量設置方法。
最近寫個代碼用OCI在局域網內鏈接oracle數(shù)據(jù)庫,開始天真的以為像鏈mysql數(shù)據(jù)庫那樣簡單:下載了頭文件和庫文件開發(fā)包后就可以直接鏈接數(shù)據(jù)庫了,結果我發(fā)現(xiàn)我錯了,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 里面包含了動態(tài)庫文件 libclntsh.so.11.1(***版本可能不一樣) 并將其加載到動態(tài)庫搜索路徑中去,這里就不說詳細步驟了,有疑問百度/狗狗搜索,實在不行在下面留言。
*Instant Client Package - SDK 這個則是包含的頭文件
運行程簡單的C鏈接序報錯: ORA-12541: TNS:no listener 網絡上一搜索都說是沒有配置好oracle數(shù)據(jù)庫的監(jiān)聽器或者是監(jiān)聽器沒有啟動,而那太oracle10g數(shù)據(jù)庫的監(jiān)聽器明明啟動了,而且網內另外一太機器安裝了oracle client客戶端用sqlplus能鏈接并操作數(shù)據(jù)庫(那個標準client快500M,太肥了,不想裝),于是我也下載了sqlplus包: *Instant Client Package - SQL*Plus 配置好以后發(fā)現(xiàn)在終端運行sqlplus命令鏈接oracle數(shù)據(jù)庫錯誤依舊:
ERROR:
ORA-12541: TNS:no listener
連sqlplus都報一樣的錯誤那就不是oci的問題了,是instant的環(huán)境配置問題鳥。在百度/狗狗上搜索一通,發(fā)現(xiàn)配置oracle的instant,要配置兩個環(huán)境變量參數(shù):TNS_ADMIN 和 ORACLE_HOME 。用export命令只對當前運行的系統(tǒng)有效,重啟系統(tǒng)后就沒了,因此要做到一次配置***生效就要編輯 ~/.bashrc 文件,在文件末尾加上兩句:
- export TNS_ADMIN=/home/oracle/network/admin
- export ORACLE_HOME=/home/oracle
注:ORACLE_HOME 環(huán)境變量的路徑是解壓 Instant Client Package - Basic zip包的解壓路徑,路徑下包含了從Basic包里解壓出來的so文件jar文件等。
TNS_ADMIN環(huán)境則是標識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 兩個環(huán)境變量生效,檢查方法很簡單,分別在終端輸入命令:
- [mgqw@localhost cutest]$ echo $ORACLE_HOME
- /home/oracle
- [mgqw@localhost cutest]$ echo $TNS_ADMIN
- /home/oracle/network/admin
如果像上面那樣有路徑輸出則說明配置成功了,如果沒有輸出那重新再編輯一下 ~/.bashrc 看看哪里出了問題吧。
檢查完成以后運行sqlplus登錄數(shù)據(jù)庫成功,運行C程序鏈接數(shù)據(jù)庫也成功。
【編輯推薦】