RHEL6.2 x86_64 下oracle 11g的安装 by 宫长玉
在安装过程中如遇到问题可以一起讨论,共同学习,如有错误,还请告知,谢谢
1.首先 修改 /etc/sysctl.conf文件 添加参数
[root@redz-server ~]# cat >>/etc/sysctl.conf << EOF
> #oracle need parameters
> fs.aio-max-nr=1048576
> fs.file-max=6815744
> kernel.shmall=2097152
> kernel.shmmax=1024000000(根据系统内存多少来调整)
> kernel.shmmni=4096
> kernel.sem=250 32000 100 65500
> net.ipv4.ip_local_port_range=9000 65500
> net.core.rmen_default=262144
> net.core.rmem_max=4194304
> net.core.wmem_default=262144
> net.core.wmem_max=1048586
> EOF
执行 /sbin/sysctl -p使参数生效
2. 修改 /etc/security/limits.conf
[root@redz-server ~]# cat >>/etc/sysctl.conf << EOF
[root@redz-server ~]# cat >> /etc/security/limits.conf << EOF
> # oracle need parameters
> orcle soft nproc 2047
> oracle hard nproc 16384
> oracle soft nofile 1024
> oracle hard nofile 65536
> EOF
3. 修改 /etc/pam.d/limits.conf
[root@redz-server ~]# cat >> /etc/pam.d/login << EOF
> session required pam_limits.so
> EOF
4.修改 /etc/profile
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
4. 修改 /etc/csh.login
vi /etc/csh.login
#oracle need setting
if ( $USER == "oralce" ) then
limit maxproc 16384
limit descriptors 65536
umask 022
endif
5.创建用户组及用户
[root@redz-server ~]# /usr/sbin/groupadd oinstall
[root@redz-server ~]# /usr/sbin/groupadd dba
[root@redz-server ~]# /usr/sbin/useradd -m -g oinstall -G dba oracle
[root@redz-server ~]# echo "oracle"|passwd --stdin oracle
更改用户 oracle 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
6.创建安装目录并授权
[root@redz-server ~]# mkdir -p /opt/oracle/ora11g
[root@redz-server ~]# chown -R oralce:oinstall /opt/oracle/ora11g
[root@redz-server ~]# chown -R oracle:oinstall /opt/oracle/ora11g
[root@redz-server ~]# chmod -R 775 /opt/oracle/ora11g
[root@redz-server ~]# mkdir -p /opt/oracle/oraInventory
[root@redz-server ~]# chown -R oracle:oinstall /opt/oracle/oraInventory
[root@redz-server ~]# chmod -R 775 /opt/oracle/oraInventory
7设置oracle 用户环境变量 (注意shell命令 '[',' ]‘和’=‘两边都有一个空格)
vi /home/oracle/.bash_profile
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/opt/oracle/ora11g; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.2/dbhome; export ORACLE_HOME
ORACLE_SID=redzdb; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH;export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export CLASSPATH
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
umask 022
使文件生效
source /home/oracle/.bash_profile
8设置系统防火墙
[root@redz-server ~]# vi /etc/sysconfig/iptables (只有在防火墙启用的情况下,才存在iptables文件)
加入
-A INPUT -m state --state NEW -m tcp -p tcp --drop 1158 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --drop 1521 -j ACCEPT
[root@redz-server ~]# /etc/init.d/iptables restart(重启防火墙,启用新规则)
9.在安装前要设置在/etc/hosts文件中添加本地ip
192.168.1.8 redz-server localhost
10 .用oracle用户登录。解压数据库安装文件后,开始安装(如果环境变量前面设置成功,这里便不用在手动设置,如果安装中文是乱码
在 终端先执行 export LANG=en_US)
[oracle@redz-server ~]$ export LANG=en_US
[oracle@redz-server ~]$ cd orainstall
[oracle@redz-server ~ orainstall]# ./runInstaller
等候图形界面安装
ps :
如果用root用户登录后,在终端中su oracle 后,安装,可能存在display错误
有许多解决办法,但是不一定成功,所以还是建议直接用oracle用户登录系统
display检测不通过的解决
方法1: [root@redz-server ~]# xhost local:oracle;
方法2: [root@redz-server ~]# xhost +;
方法2: [root@redz-server ~]# xhost +192.168.1.8;
[ root@redz-server ~]# su oracle
[oracle@redz-server ~]$ export DISPLAY=192.168.1.8:0.0
以上方法可能都不成功
11.安装完成后, 配置监听器监听数据库实例名称(oracle监听的动态注册与静态注册不是很清楚,高版本数据库,可能不需要手动配置监听便能访问了,因此,此步骤可以暂时省略)
./netmgr
4.设置oralce 随机启动
[root@redz-server ~]# vi /etc/oratab
redzdb:/opt/oracle/ora11g/product/11.2.2/dbhome:N
改为
redzdb:/opt/oracle/ora11g/product/11.2.2/dbhome:Y
12.以系统用户oracle编辑 $ORACLE_HOME/bin/dbstart
#注释掉 ORACLE_HOME_LISTNER=$1
添加 ORACLE_HOME_LISTNER=$ORACLE_HOME
ps:因为在这个脚本自动生成的时候,也就是ORACLE被安装进RHEL的时候,这个脚本并不知道你的
◆ORACLE_HOME_LISTNER是什么,现在要将这个参数显示的写明,这样就不会在执行这个脚本的时候报
◆ORACLE_HOME_LISTNER没有被指定的错误了。注意:dbstart和dbshut脚本在10g之后就已经将监听器的启动与关闭合并进数
据库实例的启动与关闭脚本里面了。而不再是单独分开的了
13 以系统用户oracle编辑 $ORACLE_HOME/bin/dbshut
#注释掉 ORACLE_HOME_LISTNER=$1
添加 ORACLE_HOME_LISTNER=$ORACLE_HOME
14 编写随机启动脚本,注册为系统服务
su root
vi /etc/init.d/redzora
#!/bin/bash
#chkconfig:2345 99 10
#description:StartupScriptfororacleDatabases
#/etc/rc.d/init.d/oradbstart
export ORACLE_BASE=/opt/oracle/ora11g
export ORACLE_HOME=/opt/oracle/ora11g/product/11.2.2/dbhome
export ORACLE_SID=redzdb
export PATH=$PATH:$ORACLE_HOME/bin
case "$1" in
start)
echo "-----startuporacle-----" >> /var/log/oracleauto.log
su oracle -c $ORACLE_HOME/bin/dbstart
su oracle -c "$ORACLE_HOME/bin/emctl start dbconsole"
touch /var/lock/subsys/redzora
echo "-----startuporaclesuccessful-----" >> /var/log/oracleauto.log
echo "OK"
;;
stop)
echo "-----shutdwnoracle-----" >> /var/log/oracleauto.log
su oracle -c "$ORACLE_HOME/bin/emctl stop dbconsole"
su oracle -c $ORACLE_HOME/bin/dbshut
rm -f /var/lock/subsys/redzora
echo "-----shutdownoraclesuccessful-----" >> /var/log/oracleauto.log
echo "OK"
;;
*)
echo "Usage:'basename$0'start|stop"
exit1
esac
按 ALT+z
输入:wq
保存退出
执行 chmod -Rf 777 /var/lock/subs/
chmod -Rf 777 /var/log
使用户能够读写启动文件及日志
ps:
(参考文章引用,对作者表示感谢)
现在,我要对这段脚本做一个关键解释:
第一:#chkconfig:23459910虽是一行注释,但是确实关键的必不可少的一行,除非你不用chkconfig命令来自动生成符号连接文件,而是完全采用手工创建。否则没有这一行,执行chkconfig系统将会报出oracle11没有chkconfig服务权限的错误。
第二:suoracle-c$ORACLE_HOME/bin/dbstart和touch/var/lock/subsys/oracle11这两行的作用是首先执行dbstart脚本启动oracle,然后在服务活动列表目录中创建一个与oracle11这个服
务同名的一个文件,表示这个服务是活动的,也就是被启动的。
而suoracle-c$ORACLE_HOME/bin/dbshut和rm-f/var/lock/subsys/oracle11这两行的作用是首先执行dbshut急哦脚本关闭oracle,然后从服务活动列表目录中删除那个与oracle11同名的那
个文件,表示这个服务不是活动的,也就是已经被关闭。
那么为什么要做touch/var/lock/subsys/oracle11和rm-f/var/lock/subsys/oracle11这两步呢?原因是跟LINUX系统的机制有关的:LINUX的判别一个服务是否被启动的依据是在/var/lock/subsys/目录下是否与服同名的文件,若有则表示这个服务已经被启动了,在系统关闭的时候,LINUX会把这里面列出的服务全部关闭,并删掉与服务同名的文件。若一个服务被启动了,但却在这个目录里没有那个服务的同名文件,则不会关闭那个服务。网上的文章均将这个地方设置错了,所以会发现,ORACLE可以随系统启动了,但却没有随系统关闭。我也是分析了/etc/rc.d/rc.local后才发现这个原理的。经过试验,果然如此。再分析mysql的启动与关闭脚本也是这样做的,最终恍然大悟
原来如此。这个地方请大家注意了。
15将编写的启动脚本注册为系统服务
1)给脚本赋予可以被执行的权限
su root
chown oracle /etc/init.d/redzora
chmod 775 /etc/init.d/redzora
2)创建符号链接文件
chkconfig --add /etc/init.d/redzora
(参考文章引用,对作者表示感谢)
执行这个命令就需要你在脚本中写上#chkconfig:2345 99 10了。这样当这个命令被执行的时候,回去oracle11文件中寻找这行注释,并解析这行注释,根据解析结果分别在/etc/rc.d/rc2.d;/etc/rc.d/rc3.d;/etc/rc.d/rc4.d;/etc /rc.d/rc5.d中创建符号连接文件S99oracle11文件,这个文件是系统启动时要执行的,其实这个文件是指向/etc/init.d /oracle11的,启动的时候系统向这个文件发送一个start参数,也就执行了oracle11文件中的start分支了。还会在/etc /rc.d/rc0.d;/etc/rc.d/rc1.d;/etc/rc.d/rc6.d中创建K10oracle11文件,这个文件时系统关闭时要执行的,其实这个文件也是指向/etc/init.d/oracle11的,关闭的时候系统向这个文件发送一个stop参数,也就执行了oracle11文件中的stop分支了。
我想你应该明白#chkconfig:2345 99 10中这些数字的含义了吧:指出2,3,4,5级别启动这个服务,99是在相应的/etc /rc.d/rcN.d(N为前面指定的级别,这里是2345)目录下生成的链接文件的序号(启动优先级别)S99oracle11,10为在除前面指出的级别对应的/etc/rc.d/rcN.d(N为除2345之外的级别)目录生成的链接文件的序号(服务停止的优先级别)K10oracle11。至于为什么在这些目录中创建文件和文件的命名规则,这就要您对LINUX的系统启动流程有一个熟悉的了解了,在这就不详谈了
在root用户下测试执行 /etc/init.d/redzora start
/etc/init.d/redzora stop
自动启动成功