一 简述
在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