前段時(shí)間有位兄弟在我博客上找到一篇我以前寫的用OCI鏈接oracle數(shù)據(jù)庫配置方法的帖子,因?yàn)橹皇请S手記錄,那篇文章里面很多東西都
Linux下OCI連Oracle的基礎(chǔ)----配置Instant Client連接oracle數(shù)據(jù)庫
前段時(shí)間有位兄弟在我博客上找到一篇我以前寫的用OCI鏈接oracle數(shù)據(jù)庫配置方法的帖子,因?yàn)橹皇请S手記錄,那篇文章里面很多東西都沒交代清楚,我看得懂人家看起來就云里霧里。oracle聲名在外又不是蓋的,而那位老兄被上面逼得很急,加我qq問了我三四天總算才基本搞定OCI鏈接oralce數(shù)據(jù)庫。
也不能怪那個(gè)老兄,不像用C連mysql很簡(jiǎn)單,官方文檔漢化很全很詳細(xì),市面上銷售的mysql書籍很多都有關(guān)于C連mysql數(shù)據(jù)庫的例子和相關(guān)介紹。想想當(dāng)初我弄C通過OCI接口連oracle數(shù)據(jù)庫去新華書店/當(dāng)當(dāng)網(wǎng)把oracle有關(guān)的書籍找了個(gè)遍,全部都是介紹java,php,多奶等語言連oracle的例子介紹,僅僅只有一本《Oracle Spatial與OCI高級(jí)編程》有一些OCI的介紹,唯一的這本書對(duì)怎么配置OCI連接環(huán)境也只字不提。
oracle官方文檔全英文還藏著捏著生怕別人看到,相對(duì)mysql的C詳細(xì)漢化文檔完全讓人吐血;網(wǎng)上搜索也基本只能搜索到windows下的配置方法,linux下基本沒有,我當(dāng)時(shí)就是根據(jù)windows下配置方法和一些英文文檔一步一步弄出來的。為了不讓后來人重蹈那位老兄的覆轍,通過這篇文章,我從零開始一步一步詳細(xì)地教大家在linux下用C語言通過OCI連接oracle數(shù)據(jù)庫。
要說明一下,oracle有對(duì)應(yīng)的client客戶端安裝包,但那個(gè)標(biāo)準(zhǔn)client包不但巨肥有400多M,把七七八八的東西全加進(jìn)去了,而且在linux下很多發(fā)版安裝不了(我記得Fedora就不行)。
首先,去oracle官網(wǎng)下載C語言的庫文件和頭文件網(wǎng)址如下,,選擇對(duì)應(yīng)的Instant Client版本(我下載的都是zip包,沒有下載rpm包,rpm包應(yīng)該安裝的時(shí)候就把那些東西配置好了):
下面是linux i386版本的
Instant Client Package - Basic 里面包含了動(dòng)態(tài)庫文件 libclntsh.so.11.1(最新版本可能不一樣) 并將其加載到動(dòng)態(tài)庫搜索路徑中去,這里就不說詳細(xì)步驟了,有疑問百度/狗狗搜索,實(shí)在不行在下面留言。
*Instant Client Package - SDK 這個(gè)則是包含的頭文件
*Instant Client Package - SQL*Plus sqlplus這個(gè)東西最好還是下一個(gè)裝上,試驗(yàn)客戶端是否配置好,查看sql語句執(zhí)行結(jié)果都需要他。
下載文件路徑設(shè)置:
/home/oracle/lib 存放Basic和sqlplus的各種庫文件,因此在/etc/ld.so.conf文件中添加路徑/home/oracle/lib ,還有就是在當(dāng)前文件下為libclntsh.so.11.1庫文件建個(gè)軟連接 ln -s libclntsh.so.11.1 libclntsh.so 讓代碼連接動(dòng)態(tài)庫的時(shí)候能找到庫文件。
/home/oracle/include 存放SDK的頭文件。
配置好以后發(fā)現(xiàn)在終端運(yùn)行sqlplus鏈接oracle數(shù)據(jù)庫錯(cuò)誤:ERROR:ORA-121: TNS:no listener 網(wǎng)絡(luò)上一搜索都說是沒有配置好oracle數(shù)據(jù)庫的或者是沒有啟動(dòng),而那太oracle10g數(shù)據(jù)庫的明明啟動(dòng)了,而且網(wǎng)內(nèi)另外一臺(tái)windows機(jī)器安裝了oracle client客戶端用sqlplus能鏈接并操作數(shù)據(jù)庫。
連sqlplus都報(bào)一樣的錯(cuò)誤那就不是sqlplus或者是oci的問題了,是instant的環(huán)境配置問題鳥。在百度/狗狗上搜索一通,發(fā)現(xiàn)配置oracle的instant,要配置一個(gè)環(huán)境變量參數(shù):ORACLE_HOME 。用export命令只對(duì)當(dāng)前運(yùn)行的系統(tǒng)有效,重啟系統(tǒng)后就沒了,因此要做到一次配置永久生效就要編輯 ~/.bashrc 文件,在文件末尾加上一句:
export ORACLE_HOME=/home/oracle/lib
注:ORACLE_HOME 環(huán)境變量的路徑是解壓 Instant Client Package - Basic zip包的解壓路徑,路徑下包含了從Basic包里解壓出來的so文件jar文件等。
最后在 $ORACLE_HOME/network/admin 目錄(沒有就新建)下新建一個(gè)oracle配置文件tnsnames.ora文件 ,我的tnsnames.ora是從其他機(jī)器上直接拷過來的,內(nèi)容如下:
# 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環(huán)境變量生效,檢查方法很簡(jiǎn)單,分別在終端輸入命令:
[mgqw@localhost ~]$ echo $ORACLE_HOME
/home/oracle
如果像上面那樣有路徑輸出則說明配置成功了,如果沒有輸出那重新再編輯一下 ~/.bashrc 看看哪里出了問題吧。
檢查完成以后運(yùn)行sqlplus登錄數(shù)據(jù)庫成功!例子如下,運(yùn)行C程序鏈接數(shù)據(jù)庫也成功!總算把環(huán)境配好了。
[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 - bit 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.
下面補(bǔ)償一點(diǎn)配置文件說明:
tnsnames.ora文件放在客戶端機(jī)器上,并且在默認(rèn)狀態(tài)下存儲(chǔ)在ORACLE_HOME/network/admin目錄中。 sqlnet.ora文件控制著客戶端Oracle Net Services的行為,例如跟蹤級(jí)別和會(huì)話特性。我們已經(jīng)知道了listener.ora和init.ora文件的用途和位置。
從根本上講,當(dāng)客戶發(fā)出請(qǐng)求時(shí),通過使用tnsnames.ora文件首先解析Oracle Net Services的名稱。tnsnames.ora文件中的參數(shù)將該請(qǐng)求指引到適當(dāng)?shù)臄?shù)據(jù)庫節(jié)點(diǎn)。進(jìn)程監(jiān)聽客戶請(qǐng)求,并且將其與一個(gè)服務(wù)器進(jìn)程相連接。該請(qǐng)求將被處理,其結(jié)果被返回到客戶端機(jī)器。
Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號(hào)-2
違法及侵權(quán)請(qǐng)聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市萬商天勤律師事務(wù)所王興未律師提供法律服務(wù)