一 簡述
????在Oracle10g開始盛行的今天,9i依然在眾多項(xiàng)目中得到廣泛應(yīng)用, 這次一個(gè)偶然的機(jī)會(huì)需要在Red Hat ES 4上裝Oracle9i, 想想上次裝Oracle還是三年前的事了, 由于ES4不 在 Oracle 9i 的官方支持的linux版本之內(nèi),這次安裝用了近2天時(shí)間才搞定,查資料,找補(bǔ)丁,一遍一遍的重裝,好像回到了當(dāng)年剛參加工作時(shí)的那種狀態(tài),很有感觸,做技術(shù)有些東西總是不會(huì)變。裝的過程中發(fā)現(xiàn)對(duì)ES4上裝9i的總結(jié)不多,大部分都不是很完整,便整理了這個(gè)文檔,希望對(duì)大家有用。
二 技術(shù)準(zhǔn)備
??? Oracle數(shù)據(jù)庫在linux下的安裝相對(duì)來說要復(fù)雜一些,所以大家安裝前要做一定的技術(shù)準(zhǔn)備,有下面幾個(gè)方面:
- 要熟悉linux的基本命令
- 要了解Oracle的基本結(jié)構(gòu)和一些術(shù)語的含義,如SGA,Redo Log Buffer.
- 要先準(zhǔn)備一些安裝資料,對(duì)安裝的過程和安裝過程中可能出現(xiàn)的問題有一個(gè)提前的認(rèn)識(shí).
????從參考資料來說,最好的資料是Oracle官方的文檔,非常全面,應(yīng)有盡有。購買Oracle時(shí)會(huì)專門有一張文檔光盤,許多網(wǎng)站上也提供下載。此外,Oracle官方網(wǎng)站上也有專門的linux欄目。除了Oracle的官方資料以外,最值得一看的是臺(tái)灣何致億先生的《Oracle 9i 數(shù)據(jù)庫管理實(shí)務(wù)》,絕對(duì)是經(jīng)典。其他的一些網(wǎng)站上的資料,大多不夠全面和完整,有些文檔寫的還有錯(cuò)誤,用來參考就可以了。
三 安裝準(zhǔn)備
??? 在做了一定的技術(shù)準(zhǔn)備后,我們可以開始安裝Oracle了,首先是要評(píng)估一下安裝的環(huán)境,包括硬件和軟件的。對(duì)于硬件,Oracle的官方文檔中是這樣描述的:
- How many disk drives are available to Oracle and its databases
- How many, if any, dedicated tape drives are available to Oracle and its databases
- How much memory is available to the instances of Oracle you will run (see your system's configuration documentation)
?而軟件其實(shí)除了Linux之外就是確定要使用的 JDK 的版本,Oracle也自帶了兩個(gè)jdk,我們裝的jdk好像沒什么用,不裝也沒事,裝的版本不對(duì)反而會(huì)引發(fā)一些問題。
對(duì)于安裝 Oracle 9i,最低的內(nèi)存要求是 512 M,硬盤有最少要 2.5G 的空間,400M以上的臨時(shí)硬盤空間。查看系統(tǒng)硬件情況的幾個(gè)常用的命令:
????????1) $free
??????? 2) $top?????
??????? 3) $grep MemTotal /proc/meminfo?
??????? 4)交換空間 # grep SwapTotal /proc/meminfo 一般這個(gè)值是1 GB或者2倍內(nèi)存大小
????????? 1) $df????
??????????2) $/sbin/swapon -s
????????? 3) /tmp 空間 400 MB??? # df -k /tmp?
????????? 4)軟件所需空間 2.5 GB???? # df -k
下面要來調(diào)整系統(tǒng)內(nèi)核參數(shù).Oracle9i使用Linux的共享內(nèi)存、交換區(qū)等資源進(jìn)行工作,如果系統(tǒng)的的內(nèi)核參數(shù)設(shè)置不能滿足Oracle的需求,那么在安裝或使用過程就會(huì)出現(xiàn)各種問題.進(jìn)入目錄/proc/sys/kernel后,用 cat 命令查看各個(gè)參數(shù)的值
? ? #cat shmmax
? ? #cat shmmni
? ? #cat shmall
? ?特別注意要調(diào)大linux的共享內(nèi)存的值,即shmmax,否則在安裝時(shí)Oracle安裝程序會(huì)提示共享內(nèi)存不足的錯(cuò)誤。共享內(nèi)存大小一般設(shè)為物理內(nèi)存的一半,比如2G內(nèi)存,你需要設(shè)成1G 就是 1024*1024*1024 = 1073741824,512M 內(nèi)存就是 1474838646. 比較簡便的調(diào)整的命令是以root身份執(zhí)行
#echo 1073741824 > shmmax 命令。據(jù)說10g這個(gè)值需要設(shè)到2G以上才能裝,恐怖. 此外很多文檔上說要設(shè)置內(nèi)核參數(shù)、 調(diào)節(jié)信號(hào)燈,但根據(jù)個(gè)人經(jīng)驗(yàn), 不設(shè)置也不會(huì)影響正常安裝。
如果需要調(diào)整內(nèi)核參數(shù)、 調(diào)節(jié)信號(hào)燈的話,按下面的步驟執(zhí)行:
? ? 打開/etc/sysctl.conf 文件,將下列數(shù)據(jù)寫入到sysctl.conf的末尾并保存:
? ???kernel.shmmax = 1073741824? ?? ???
? ???kernel.shmmni = 4096? ?? ?? ?? ?
? ???kernel.shmall = 2097152
? ???kernel.sem = 250 32000 100 128
? ???fs.file-max = 65536
? ???net.ipv4.ip_local_port_range = 1024 65000
? ? 其中,kernel.shmmax是共享內(nèi)存段最大尺寸,kernel.shmmni是共享內(nèi)存段最小尺寸。 ? ?用命令:
? ???#cat sem
??
? ?可以查看kernel.sem的數(shù)值。其中, 250 是參數(shù)SEMMSL的值,32000是參數(shù)SEMMNS的值, 100是參數(shù)SEMOPM的值,而128則是參數(shù)SEMMNI的值。
? ?一般來說,出于性能上的考慮,還需要需要進(jìn)行如下的設(shè)定,以便改進(jìn)Oracle用戶的有關(guān) nofile(可打開的文件描述符的最大數(shù))和nproc(單個(gè)用戶可用的最大進(jìn)程數(shù)量)的要求. 打開/etc/security/limits.conf文件,將下列數(shù)據(jù)添加到 limits.conf的末尾并保存:
? ? oracle soft nofile 65536
? ? oracle hard nofile 65536
? ? oracle soft nproc 16384
? ? oracle hard nproc 16384
???修改并保存完畢后,重新啟動(dòng)。也可以執(zhí)行: # /sbin/sysctl -p 命令操作來使我們所做的變更生效.
? ?如果此時(shí)進(jìn)入到/proc/sys/kernel路徑,用上述的命令再次查看,就會(huì)看到設(shè)置的參數(shù)已經(jīng)生效。
用命令rpm -qa|grep compat 查看系統(tǒng)中是否安有以下幾個(gè)軟件包:
compat-libstdc++-****.i386.rpm
compat-gcc-****.i386.rpm
compat-Libgcj-****.i386.rpm
compat-Libgcj-devel-****.i386.rpm
binutils-****.i386.rpm
nss_db-compat-****.i386.rpm
一般來說應(yīng)該安裝cpp, glibc, egcs, egcs-c++, glibc-devel, kernel-headers等包,如果是新安裝Linux,則在安裝的時(shí)候選包的時(shí)候,把開發(fā)那個(gè)大類和一個(gè)兼容包的大類(里面都是 compat 開頭的包)都選上,應(yīng)該問題就不大. 如果按照時(shí)發(fā)現(xiàn)有包不全,從linux光盤里找到對(duì)應(yīng)的rpm安裝就是了。
四 逐步安裝
1 安裝JDK
??可不裝。
2 創(chuàng)建用戶
? 創(chuàng)建用戶和組,一方面是按Oracle的要求準(zhǔn)備用戶,另一方面也通過創(chuàng)建用戶來準(zhǔn)備好Oracle的安裝容器,命令如下:
創(chuàng)建用戶組:
[root@Server0]# groupadd oinstall
[root@Server0]# groupadd dba
添加用戶,設(shè)置密碼:
[root@Server0]# useradd -g oinstall -G dba oracle
[root@Server0]# passwd oracle
3 設(shè)置oracle用戶的環(huán)境變量
? 這是關(guān)鍵步驟! 編輯oracle用戶根目錄下的.bash_profile文件,指定其環(huán)境變量,這些參數(shù)指定安裝的,在不同的Red Hat 版本上安裝的區(qū)別也在這有所體現(xiàn)。ES 4下的配置文件示例:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# 這里的***.***.***.***指服務(wù)器的ip地址
export DISPLAY="***.***.***.***:0.0"
# User specific environment and startup programs
export ORACLE_BASE=/home/oracle/OraHome1
export ORACLE_HOME=/home/oracle/OraHome1
export ORACLE_SID=dbora
export ORACLE_TERM=xterm
export LANG=zh_CN
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/openwin/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/td/lib:/usr/ucblib:/usr/local/lib
export LD_LIBRARY_PATH
# 注意這一句
export LD_ASSUME_KERNEL=2.4.19
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/etc:/opt/bin
PATH=$PATH:$ORACLE_HOME/bin
PATH=$PATH:/usr/java/jdk/bin:/usr/java/jdk/jre/bin:.
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export CLASSPATH
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
|
說明:
1) 設(shè)置DISPLAY
????Oracle 9i不再支持字符模式的安裝, 必須使用圖形化安裝,所以要設(shè)置display變量。如果不在配置文件中設(shè)置,也可以直接用命令 $ export display="***.***.***.***:0.0" 進(jìn)行設(shè)置,如果執(zhí)行命令時(shí)出錯(cuò),需要以root用戶在xserver中注冊(cè),命令: # xhost +***.***.***.*** 。這里的***.***.***.***指的是服務(wù)器的 IP 地址。
2) 設(shè)置語言和字符集
????Oracle 9i支持多國語言設(shè)置,目的是為了支持世界范圍內(nèi)的語言和字符集,在安裝前可以在配置文件中為Oracle 9i的設(shè)置安裝語言和字符集(注意,只是安裝的軟件的,不是庫的),可以設(shè)置的參數(shù)有:NLS_LANG、LANG、LC,LC_ALL等,以 NLS_LANG 為例解釋其含義,比如 export NLS_LANG=American_America.zhs16gbk ,其格式是國家語言設(shè)置.字符集,即American_America是國家語言設(shè)置,zhs16gbk是字符集,而American_America中的 American由指劃分的世界大區(qū),America指國家。注意國家語言設(shè)置和字符集沒有必然的關(guān)聯(lián)關(guān)系。常見的設(shè)置舉例:
export NLS_LANG=American_America.UTF-8
export LANG=en_US
export LC=en_US
export LC_ALL=American_America.UTF-8
可以執(zhí)行下面的命令查看當(dāng)前機(jī)器的locale相關(guān)的配置:
????$ locale
3) 設(shè)置 ORACLE_SID
????這里設(shè)置的ORACLE_SID是 Oracle 默認(rèn)啟動(dòng)的實(shí)例id,一定要設(shè)置正確。
4) 設(shè)置 LD_ASSUME_KERNEL
????對(duì)于Red Hat Enterprise Server 3, 要設(shè)置 LD_ASSUME_KERNEL 的值為:2.4.19。
5) /sbin 一定要加到 PATH 中去,要不安裝補(bǔ)丁時(shí)會(huì)出錯(cuò)。
4 準(zhǔn)備安裝文件
Oracle常用的是兩種安裝方式:從光盤和從硬盤文件。
- 從光盤安裝
??下載光盤映象文件(ISO文件,3個(gè)文件)或者DVD映象文件,校驗(yàn)md5碼無誤后刻錄光盤。
- 從硬盤安裝
下載安裝文件,假設(shè)為Linux9i_Disk1.cpio.gz,Linux9i_Dis2.cpio.gz,Linux9i_Disk.cpio.gz,校驗(yàn)其md5碼。命令如下: $ md5sum Linux9i_Disk1.cpio.gz Linux9i_Disk2.cpio.gz Linux9i_Disk3.cpio.gz
f1a99eb8c8aca1d69a9eeaa8858570d7 Linux9i_Disk1.cpio.gz
f2444c0fa53c898e7d2f78c184829d7d Linux9i_Disk2.cpio.gz
ec655402d8bc547ed031f14122da574b Linux9i_Disk3.cpio.gz
驗(yàn)證無誤后解壓文件:
#gunzip Linux9i_Disk1.cpio.gz
#cpio -idmv < Linux9i_Disk1.cpio
類似的對(duì)解壓Linux9i_Dis2.cpio.gz,Linux9i_Disk3.cpio.gz
這個(gè)將生成三個(gè)文件夾:DISK1, DISK2, DISK3
安裝文件的選擇也有很多的方式,可以先裝一個(gè)92的一個(gè)低點(diǎn)版本, 再打補(bǔ)丁升級(jí)到一個(gè)高點(diǎn)版本,比如我是安裝了9204(從oracle網(wǎng)站上下載的,速度很快,兩個(gè)小時(shí)能全down下來),安裝完成再打的補(bǔ)丁升級(jí)到9206,補(bǔ)丁不是公開的而且很大,需要到Metalink去找。
5 安裝前打一些補(bǔ)丁
??? Oracle 官方為Metalink上的用戶公開了一些 Oracle 9i 的補(bǔ)丁,可以解決安裝時(shí)一些錯(cuò)誤,不過要在Metalink上注冊(cè)需要購買過Oracle產(chǎn)品,沒有的話只能去網(wǎng)上找了.補(bǔ)丁的情況大概如下:
p3006854_9204_LINUX.zip 在運(yùn)行 runInstaller 之前打,如果不打的話那個(gè)安裝的圖形界面跑不起來.
p2617419_210_GENERIC.zip 這個(gè)是oracle 的打補(bǔ)丁工具,也是必須的
p4198954_40_LINUX.zip 這個(gè)是在 RH ES4 上按照Oracle 9i必需要打的一個(gè)補(bǔ)丁,我也就是因?yàn)椴恢酪蜻@個(gè)補(bǔ)丁耽誤了很多時(shí)間。
? 先按照p3006854,步驟是以root身份運(yùn)行:
#unzip p3006854_9204_LINUX.zip
#cd 3006854
#sh rhel3_pre_install.sh
?? 注意這里可能會(huì)出一些錯(cuò)誤。比如如果沒有安裝gcc, 會(huì)出現(xiàn)下面的錯(cuò)誤: rhel3_pre_install.sh: line 36: gcc: command not found 而要是運(yùn)行完了rhel3_pre_install.sh出現(xiàn) error while loading shared libraries: /etc/libcwait.so: cannot open shared object file: No such file or directory 這種錯(cuò)誤的時(shí)候,也不用急,就是因?yàn)檫@個(gè)補(bǔ)丁沒有正常打成功導(dǎo)致了一些問題,只要?jiǎng)h掉/etc/ld.so.preload 這個(gè)文件就行了:
#rm /etc/ld.so.preload
然后就可以再安裝p4198954包 $unzip p4198954_21_LINUX.zip 在解開的目錄 4198954 下分別有:compat-oracle-rhel4-1.0-5.i386.rpm,compat-libcwait-2.0-2.i386.rpm 兩個(gè)包,分別安裝。
6 安裝Oracle
打完上面的補(bǔ)丁后,可以開始安裝Oracle數(shù)據(jù)庫了,步驟:
- 切換到oracle用戶
$ su - oracle
$ cd ~
- 進(jìn)入安裝文件目錄,設(shè)置環(huán)境變量LANG,用英文界面安裝( 中文有問題 ):export LANG=en_US
$ cd /mnt/cdrom 或者 $ cd Disk1
$ ./runInstaller.sh 或者 $./install(如果沒有權(quán)限,用root用戶執(zhí)行#chmod a+x ./runInstaller.sh)
- 設(shè)置參數(shù),選定要安裝的目錄
主要是做兩件事:設(shè)定安裝的Unix組:oinstall和選擇安裝目錄。
- 執(zhí)行腳本
系統(tǒng)會(huì)提示要在/tmp下以Root身份運(yùn)行***Root.sh,打開終端窗口,以Root身份運(yùn)行/tmp/***Root.sh,然后回到安裝畫面點(diǎn)Continue
- 選擇安裝的產(chǎn)品和類型
按提示設(shè)置安裝的產(chǎn)品和類型,要分清各個(gè)產(chǎn)品的區(qū)別。
此外,一般不在安裝時(shí)直接建庫,因此,選擇安裝產(chǎn)品類型時(shí)選Software Only 。
- 安裝
系統(tǒng)安裝過程中,文件拷貝完成后系統(tǒng)提示運(yùn)行Root.sh腳本,打開終端,以Root身份運(yùn)行Root.sh后返回繼續(xù)安裝即可.
- 安裝錯(cuò)誤
遇到錯(cuò)誤,首先檢查/tmp/OraInstall******(時(shí)間) 中的錯(cuò)誤日志,如果遇到 make 的錯(cuò)誤,檢查: $ORACLE_HOME/install/make.log 。
出現(xiàn)下面的錯(cuò)誤"Error invoking target install of makefile /opt/oracle/product/9.0.1/plsql/lib/ins_plsql.mk",手工修復(fù),修復(fù)方法: 編輯 $ORACLE_HOME/bin/genclntsh 把 LD_SELF_CONTAINED="-z defs" 改成: LD_SELF_CONTAINED="" 然后運(yùn)行腳本:$ORACLE_HOME/bin/genclntsh: $ $ORACLE_HOME/bin/genclntsh Created /opt/oracle/product/9.0.1/lib/libclntst9.a 然后選擇重試。
在安裝過程中,可能會(huì)提示兩個(gè)錯(cuò)誤, 一個(gè)錯(cuò)誤是關(guān)于OEM Agent,另一個(gè)錯(cuò)誤是ins_ctx.mk,(我以前安裝9201的時(shí)候遇到過,這次因?yàn)槭侵苯踊?204裝的,這兩個(gè)錯(cuò)誤并沒有出現(xiàn)),直接忽略或者跳過.一般來說,這兩個(gè)錯(cuò)誤并不影響我們使用Oracle的數(shù)據(jù)的基本功能,如果要修復(fù)這兩個(gè)錯(cuò)誤,也很容易,后面附一個(gè)解決這兩個(gè)錯(cuò)誤的辦法。
- 安裝完成后,可以為Oracle打補(bǔ)丁升級(jí),打補(bǔ)丁時(shí)要使用opatch命令,此命令是oracle打補(bǔ)丁的一個(gè)工具,需要單獨(dú)下載此工具,為patch 2617419。安裝完了之后把opatch的路徑添加到PATH中。
$ unzip p2617419_210_GENERIC.zip
$ ls
$ pwd
/home/oracle/Patch
$export PATH=$PATH:/home/oracle/Patch:/sbin
要是前面是忽略了ins_oemagent.mk錯(cuò)誤,現(xiàn)在可以打補(bǔ)丁修復(fù): $ unzip p3119415_9204_LINUX.zip $ cd 3119415 $ opatch apply
- 現(xiàn)在要為oracle打9206補(bǔ)丁升級(jí)
$ unzip p394880_9206_LINUX.zip
$ cd Disk1
$ ./runInstaller
這個(gè)補(bǔ)丁的安裝需要分兩步,先是升級(jí)Universal Installer, 注意要在Specify File Location 那一步選Destination到Oracle的安裝目錄;升級(jí)Universal Installer到10以后,就可以安裝安裝 9iR2 Patchset了,記得把安裝目錄選成一樣。補(bǔ)丁比較大有幾百M(fèi),裝完后Oracle軟件的安裝就算完成了。
7 建庫
?? 安裝完成后執(zhí)行 $ ORACLE_HOME/bin/dbca 啟動(dòng)建庫助手,按自己實(shí)際要求建立數(shù)據(jù)庫.需要設(shè)置的參數(shù)有內(nèi)存分配參數(shù),字符集編碼等,可以參考相關(guān)的文檔.我在建庫的過程中也遇到了一個(gè)錯(cuò),說是NLS設(shè)置不對(duì),便將.bash_profile中的 export NLS_LANG=American_America.UTF-8 改為 NLS_LANG=American 就好了。
??? 建庫完成后,數(shù)據(jù)庫就已經(jīng)自動(dòng)在運(yùn)行了,執(zhí)行$ps -ef |grep ora_ 查找相關(guān)進(jìn)程, 以oracle用戶執(zhí)行 $ sqlplus "/ as sysdba"進(jìn)行連接測(cè)試,成功的話就大功告成了。
聲明:本博客中所有文章均為版主原創(chuàng),轉(zhuǎn)載請(qǐng)保留作者信息,并請(qǐng)注明出處。
//作者: 王瑋琳? 2006-11-07