在RedHat7.1上安裝Oracle8.1.7的經(jīng)驗談
2024-08-29 13:29:20
供稿:網(wǎng)友
在redhat7.1上安裝oracle8.1.7的經(jīng)驗談
我在redhat7.1上第一次安裝oracle8.1.7就成功了,呵呵,很幸運!后來有不少朋友請教我安裝方法,我才知道原來有這么多問題,按照我的方法應該可以安裝成功,我自己安裝了不下10遍都是很順利就成功了。總結(jié)一下自己的安裝經(jīng)驗,也總結(jié)一下別人遇到的問題,希望能對其他人有一點點幫助。
安裝假設oracle系統(tǒng)文件放在/u01下,數(shù)據(jù)庫文件放在/u02下,不安裝ops,不安裝jserver,單數(shù)據(jù)庫單實例。
oracle_base=/u01/app/oracleoracle_home=/u01/app/oracle/product/8.1.7oracle_sid=orcl
一、安裝前的配置
1、替換glibc
oracle8.1.7使用的是glibc2.1.3,而redhat7.1是用的glibc2.2.2,不兼容,所以要替換glibc才能成功安裝。
首先要安裝redhat7.1安裝光盤上的幾個以compat開頭的rpm包,它們是:
compat-glibc-6.2-2.1.3.2.i386.rpmcompat-egcs-objc-6.2-1.1.2.14.i386.rpmcompat-egcs-6.2-1.1.2.14.i386.rpmcompat-libs-6.2-3.i386.rpm
可以把:
compat-libstdc++-6.2-2.9.0.14.i386.rpmcompat-egcs-c++-6.2-1.1.2.14.i386.rpm
也安裝上。
因為這幾個軟件包之間有依賴關(guān)系,如果安裝順序不對,會報錯的,無法安裝。一般來說應該先安裝第一張上的兩個,再安裝第二張上面的四個。
如果這樣做也報錯,安裝不上,可以先把這6個軟件包拷貝到一個目錄下,然后再一起安裝,這樣就不用怕它們之間的依賴關(guān)系,一定可以安裝成功了。例如:
rpm -ivh compat-glibc-6.2-2.1.3.2.i386.rpm
compat-egcs-6.2-1.1.2.14.i386.rpm compat-libs-6.2-3.i386.rpm
compat-egcs-c++-6.2-1.1.2.14.i386.rpm
compat-egcs-objc-6.2-1.1.2.14.i386.rpm
compat-libstdc++-6.2-2.9.0.14.i386.rpm
2、創(chuàng)建用戶和組
groupadd dbauseradd oracle -g dbapasswd oracle
oracle安裝文檔上說,要創(chuàng)建兩個組,oinstall和dba,oracle用戶主屬組是oinstall,從屬組是dba,其實只用dba就好了,不要那么麻煩。
chown -r oracle.dba /u01chown -r oracle.dba /u02
3、設環(huán)境變量
可以將要設的環(huán)境變量放在oracle用戶主目錄下的.bash_profile中,也可以放在/etc/profile中,對所有的用戶可見,我建議放在/etc/profile中,因為凡是在本機運行的程序讀寫本機的oracle數(shù)據(jù)庫,一般都需要設oracle的環(huán)境變量,否則無法連接數(shù)據(jù)庫。
我可以舉一個例子:
如果你的web server,例如apache,需要讀寫數(shù)據(jù)庫,提供網(wǎng)頁的動態(tài)內(nèi)容,假設用php或者jsp,又或者perl等等來寫serverapi或者cgi,因為apache是以root啟動一個進程,這個進程再fork若干子進程以nobody用戶運行,響應80端口的http請求,所以如果在root讀不到oracle環(huán)境變量,web程序根本無法讀寫數(shù)據(jù)庫。只要root讀到oracle環(huán)境變量,fork子進程的時候,復制了父進程的數(shù)據(jù)空間,也繼承了父進程的環(huán)境變量,所以可以讀到oracle變量,就可以讀寫oracle數(shù)據(jù)庫了。
所以我這樣設置,在/etc/profile中添加如下行:
oracle_base=/u01/app/oracleoracle_home=/u01/app/oracle/product/8.1.7oracle_sid=orclora_nls=/u01/app/oracle/product/8.1.7/ocommon/nls/admin/datanls_lang="simplified chinese"classpath=.:/u01/app/oracle/product/8.1.7/jdbc/lib/classes111.zipld_library_path=/u01/app/oracle/product/8.1.7/libpath=$path:$oracle_home/bin:$oracle_home/dbs:/etcexport oracle_base oracle_home oracle_sid ora_nls nls_lang ld_library_path
path
其中$oracle_base,$oracle_home指定安裝目錄,$oracle_sid是oracle數(shù)據(jù)庫的sid,$ora_nls是字符集目錄,$nls_lang是字符集,$classpath是java程序讀寫數(shù)據(jù)庫需要的jdbc的class,前面加個點號是先搜當前目錄的意思。$ld_library_path是oracle的c庫函數(shù)和頭文件的位置,對于oci8,proc和jdbc的oci連接是必須的。
注銷再登錄,或者不用注銷,執(zhí)行下一行的命令,直接讀一下/etc/profile
. /etc/profile
再
env|grep oracle
看看oracle的變量是否都設置正確。
4、臨時更改glibc
將
. /usr/i386-glibc21-linux/bin/i386-glibc21-linux-env.shexport ld_assume_kernel=2.2.5
加入oracle主目錄(/home/oracle)下的.bash_profile,注銷再以oracle登錄,或者不用注銷,執(zhí)行下一行的命令,直接讀一下.bash_profile
. /home/oracle/.bash_profile
再看看是否已替換
gcc -v
替換之前是:
reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specsgcc version 2.96 20000731 (red hat linux 7.1 2.96-81)
替換之后是:
reading specs from
/usr/i386-glibc21-linux/lib/gcc-lib/i386-redhat-linux/2.96/specsgcc driver version 2.96 20000731 (red hat linux 7.1 2.96-81)
executing gcc version egcs-2.91.66
5、修改內(nèi)核參數(shù)
oracle數(shù)據(jù)庫運行的時候,用共享內(nèi)存來實現(xiàn)oracle的sga,所以要調(diào)整一下linux的內(nèi)核參數(shù)來適應oracle的sga的要求,這個方面到底要調(diào)整到多少才適合,可以參考oracle官方的安裝文檔。一般而言,主要就是共享內(nèi)存段最大尺寸要調(diào)整,linux內(nèi)核默認共享內(nèi)存段最大尺寸是32m,如果oracle sga開的大于32m(一般商業(yè)運行,肯定大于32m),sga就會分段,占據(jù)幾個不連續(xù)的共享內(nèi)存段,造成oracle的性能下降。
命令ipcs -al可以查看共享內(nèi)存參數(shù),命令ipcs查看共享內(nèi)存使用情況。
修改內(nèi)核參數(shù)可以修改內(nèi)核源碼再重新編譯內(nèi)核,這個方法有點麻煩,關(guān)于共享內(nèi)存的參數(shù)在源碼目錄下的include/linux/下的shm.h和sem.h文件中。
另一個簡單的辦法是直接修改內(nèi)核參數(shù),即修改/proc下的文件,立即生效。
可以修改/proc/sys/kernel下的shmmax和sem
shmmax是以字節(jié)記的共享內(nèi)存段的最大尺寸,
shmmni是共享內(nèi)存段的最大數(shù)量
shmmax是共享內(nèi)存總共最大容量(shmmax*shmmni)
sem是信號量參數(shù),msgmax,msgmnb,msgmni是消息隊列的參數(shù)。
我改動如下:
echo 134217728 > /proc/sys/kernel/shmmax (sga最大為128m)echo -e "250 32000 100 128" > /proc/sys/kernel/sem
(其實也不用改這項,只是將max ops per semop call改大了,這是oracle的安裝文檔上寫的,我就這么做了,不過我試過,不改也沒事,其他都保持原來的,沒有改)
總結(jié)如下:改一項必須的shmmax,其他的我在使用過程中,參數(shù)都夠大了,不需要再調(diào)整。
二、安裝過程
1、runinstaller啟動安裝界面
有的時候runinstaller,安裝界面不出來,這主要還是因為oracle的字符集設為了簡體中文,但os是英文的,所以有時候出不來,用java寫的程序經(jīng)常出現(xiàn)字符集的問題。此時臨時銷毀$nls_lang變量,java會用默認的字符集,就好了。所以:
unset $nls_lang
也可以試試
unset $lang
其實dbassist也是有時候出不來的,這樣做就可以出來了,但是netasst始終出不了,不清楚為什么,不過可以自己修改lisener.ora和tnsnames.ora,所以netasst也不是必須的。
另一個可能的原因就是glibc沒有替換好,我發(fā)現(xiàn)直到jdk1.3.1_01,才支持glibc2.2,之前的版本,包括jdk1.3.0都不支持glibc2.2,只要在glibc2.2下運行,就會出現(xiàn)沒有任何反應,進程好像死亡了一樣的毛病,oracle安裝程序用的還是jre1.1.8,所以只要glibc用的還是2.2版的,安裝窗口總不會出來的。
2、下面一路點擊下一步,到填寫安裝oracle軟件的屬組的時候,填寫dba就好了,然后提示用root運行$oracle_home/root.sh,以root登錄運行。在/etc/下生成一個文件orainst.loc
3、到選擇安裝“服務器”,“網(wǎng)絡管理工作站”,“客戶端”的時候,選擇“服務器”
安裝好以后,可以再回到這個畫面來選擇別的沒有安裝的組件,也隨時可以啟動runinstaller來安裝別的組件。
另外有人提到?jīng)]有安裝porc的選項,其實proc是在“客戶端”的選項里安裝的。
4、然后選擇“定制安裝”,不要選擇典型安裝,因為典型安裝會安裝oracle jserver,實際上不太用到jserver,而且安裝jserver是在sga里要啟動一個java虛擬機,非常消耗資源(java的東西總是很吃資源的),而且安裝的時候創(chuàng)建jserver的過程非常的漫長,一度令我懷疑死機了。
5、出現(xiàn)選擇安裝組件的列表,可以自己增刪一些組件,我不需要oracle的apache server,準備自己從源碼安裝,所以就勾掉了。如果要安裝apache server的選項話,要預先安裝java,并設置$java_home變量,雖然要求的是jdk1.1.8,不過用jdk1.3也完全可以安裝成功,運行apache也沒有什么問題,至于會不會因為jdk的版本不同導致一些程序運行結(jié)果的差異,我就沒有測試過了。
6、還是選擇安裝組件的列表這個界面,有個選擇語言的按鈕,增加“簡體中文”
7、詢問是否創(chuàng)建數(shù)據(jù)庫,“是”,添上安裝數(shù)據(jù)庫的sid,我的是“orcl”,數(shù)據(jù)庫數(shù)據(jù)文件的存放目錄,我的是“/u02“。
8、開始安裝oracle,安裝程序拷貝文件。
有很多人說,拷貝文件完后,聯(lián)接系統(tǒng)庫函數(shù)的時候,出現(xiàn)make錯誤,我想這多半還是替換glibc不成功導致的吧,我安裝的時候確實沒有出現(xiàn)過這樣的問題。我想按照我寫的步驟來,應該不會出現(xiàn)這樣的問題的。
9、完成后,提示以root運行root.sh。
oracle8.1.7有兩個版本,一個是oracle8.1.7.0.0,另一個是oracle8.1.7.0.1,這個版本帶ops,而且oracle提供了一個glibc2.2的patch,不過在redhat7.1上,按照上面方法做了以后,實際上不需要打補丁的。這個oracle8.1.7.0.1的版本此時的root.sh有個bug,應該在第156行,如下:
ruid=`/usr/bin/id|$awk -f( '{print $2}'|$awk -f) '{print $1}`
在最后少寫個‘
應該改為:
ruid=`/usr/bin/id|$awk -f( '{print $2}'|$awk -f) '{print $1}'`
運行它,生成/etc/oratab。
10、自動啟動netasst,配置監(jiān)聽器,一般如果為了省事,選典型配置就可以了,只不過典型配置打開了一個2481端口,是jserver用的,如果不用jserver的話,也可以不要它,現(xiàn)在可以不用管它,回頭再改listener.ora好了。
11、自動啟動dbassist,安裝數(shù)據(jù)庫,按照提示做就是了,根據(jù)自己的情況可以適當?shù)恼{(diào)整安裝數(shù)據(jù)庫時的參數(shù),最后開始創(chuàng)建數(shù)據(jù)庫,此時也可以選擇先保存創(chuàng)建的腳本,再退出dbassist,單獨運行創(chuàng)建腳本,這樣更靈活一些,可以自己改創(chuàng)建腳本,也可以自己研究一下腳本,會有收獲的。
三、安裝后配置
1、以root登錄,修改/etc/oratab,將最后的:
orcl:/u01/app/oracle/product/8.1.7:n
改為:
orcl:/u01/app/oracle/product/8.1.7:y
這樣就可以用dbstart和dbshut來啟動和關(guān)閉數(shù)據(jù)庫了,不用自己寫腳本調(diào)svrmgrl。
2、將數(shù)據(jù)庫啟動命令和修改內(nèi)核命令放在系統(tǒng)啟動腳本中
修改/etc/rc.d/rc.local,加入:
#modify kernel parameterecho 134217728 > /proc/sys/kernel/shmmax echo -e "250 32000 100 128" > /proc/sys/kernel/sem#start oracle8.1.7su - oracle -c 'lsnrctl start'su - oracle -c 'dbstart'
我比較懶,沒有另外寫腳本聯(lián)接進rc3.d,rc0.d.rc5.d,rc6.d了,而是直接放在rc.local中了,呵呵
注意的是修改內(nèi)核參數(shù)必須在啟動數(shù)據(jù)庫實例之前,啟動數(shù)據(jù)庫后,用ipcs 命令看看共享內(nèi)存的使用情況,如果沒有分段就行了。
另外一個特別要說明的事情是一定要注意,凡是讀寫數(shù)據(jù)庫的進程,必須取得oracle的環(huán)境變量,否則無法聯(lián)接數(shù)據(jù)庫。
上面的腳本中su - 中的這個"-"非常講究,它的意思是切換到oracle用戶,并取得oracle的環(huán)境變量。
再例如,如果還要啟動apache來讀寫數(shù)據(jù)庫的話,rc.local加入的命令就一定要這樣寫:
#start apache httpd server. /etc/profile/usr/local/apache/bin/apachectl start
因為我把oracle的環(huán)境變量放在/etc/profile里了,在啟動apache之前要先強制它讀/etc/profile,取得oracle的環(huán)境變量,這樣apache的serverapi程序就可以讀寫數(shù)據(jù)庫了。
3、修改net8配置,可以用netca,或者自己修改$oracle_home/network/admin下的listener.ora和tnsnames.ora,netasst好像出不來。
4、如果創(chuàng)建第二個實例,用dbassist就好了,如果dbassist出不來的話,臨時銷毀$lang,$nls_lang
unset $nls_langunset $lang
就可以出來了。
四、廢話
我沒有足夠的硬件條件來安裝ops,所以安裝oracle8.1.7的時候不選ops的;也沒有硬件條件安裝oracle9i,所以不知道redhat7.1來安裝oracle9i如何。不過用過一下suse7.1,印象很好,既然oracle官方推薦是suse的話,還是用suse來安裝oracle9i吧,這樣兼容性比較好,也省事。
如果我寫的安裝方法有什么謬誤的地方,請大家指點一下,謝謝!
我的聯(lián)系方法:
e-mail: [email protected]
qq: 14477412'
補充說明:2001年9月16日
本質(zhì)來說,redhat7.1的glibc2.2庫和其他相關(guān)工具對于oracle8i來說,是有一點高了。所以一般都要用redhat7.1自帶的兼容redhat6.2的庫替換一下,也就是glibc2.1.3。
我自己的經(jīng)驗是只要正確替換了glibc,就一定可以安裝成功,不用做別的工作。一定要把那幾個compat的rpm軟件包安裝好,正確替換,再用gcc -v試試,確定是在用compat glibc2.1.3,再開始安裝。
我在這個帖子里沒有提設display變量的問題,其實如果在本機的x下安裝oracle,會有默認設置的,根本不需要自己再設了。
如果runinstaller報display出錯的話,就自己設一下好了,無非就是
export display=192.168.0.1:0.0 (假設ip是192.168.0.1)
如果這樣做了,聯(lián)接系統(tǒng)庫的時候還報make錯誤的話(我是從來沒有遇到這樣的make error問題,所以沒有辦法測試),可能就不是glibc的問題,而是ld這些命令的版本問題了。我建議如果出現(xiàn)這種錯誤的話,試試這個方法,就是再降級binutil。
先下載binutils-2.10.0.18-1.i386.rpm(下載網(wǎng)址:http://rpmfind.net/linux/rpm/redhat/7.0/i386/binutils-2.10.0.18-1.i386.html,或者在google上搜索一下)
rpm -uvh binutils-2.10.0.18-1.i386.rpm --force --nodeps
然后再
runinstaller。
又或者雖然出現(xiàn)make error,但是畢竟可以拷貝文件安裝過去的話,也可以試試這個方法:
在安裝文件完成以后,會先后出現(xiàn)配置net8和出現(xiàn)數(shù)據(jù)庫助手創(chuàng)建數(shù)據(jù)庫的過程。
如果配置net8出錯的話,可以就這樣退出,自己手工修改$oracle_home/network/admin下的listener.ora和tnsnames.ora。)
在出現(xiàn)數(shù)據(jù)庫助手創(chuàng)建數(shù)據(jù)庫的時候,不要創(chuàng)建數(shù)據(jù)庫,退出。因為此時聯(lián)接的可執(zhí)行程序有問題,不能正確創(chuàng)建數(shù)據(jù)庫。
到oracle網(wǎng)站,在下載oracle8.1.7的地方,可以找到一個glibc的patch:
http://download.oracle.com/otn/linux/oracle8i/glibc-2.1.3-stubs.tar.gz
把它下載,放到$oracle_home下,解壓縮,
cd $oracle_home tar xvfz glibc-2.1.3-stubs.tar.gz ./setup_stubs.sh
然后在
dbassist
啟動數(shù)據(jù)庫創(chuàng)建助手,創(chuàng)建數(shù)據(jù)庫。