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