最近遇到很多 RHEL 5.X 平台安装 10G RAC的活,虽然没什么难度,但是重复的体力劳动还是比较大的。因此顺便整理了一份半自动安装的脚本。


   主要完成操作系统补丁安装,数据库用户创建,用户配置文件修改等内容。


   待解决的问题:

   1、主机名自动配置,这块需要单独的配置文件,而且配置过程中,和主机名相关的配置不是很多;

   2、共享磁盘多路径配置,因为使用裸设备和UDEV的方式不一,存储隐射出来的结果有些在/dev/mapper,有些在/dev/sd*,磁盘大小和顺序也不一致,因此没有做处理;

   3、shell不熟,没有加入校验和控制;

   4、ssh认证配置,使用的是11g rac中的自动配置脚本;


具体内容如下:RAC_AUTO_CONFIG_10G.sh


#!/bin/bash


###################################################################################

## 本文档针对 Red Hat Enterprise Linux Server release 5.X 极其兼容内核 进行 10G RAC 部署的操作

## 0. 环境信息检查

## 1. 关闭多余的服务,提高操作系统性能和安全性

## 2. 配置远程图形界面(Xmanager或VNC)

## 3. 配置本地YUM源,安装操作系统补丁包

## 4. 修改操作系统内核参数

## 5. 配置共享存储

## 6. 创建 oracle 用户及安装目录

## 7. 重启操作系统进行修改验证

## 8. 执行 CRS 安装

## 9. 安装 CRS 10.2.0.5 补丁

## 10. 执行数据库安装

## 11. 安装数据库 10.2.0.5 补丁

## 12. 安装 PSU  补丁

## 13. 手工建库

## 14. 参数调整

###################################################################################



###################################################################################

## 0. 环境信息检查

###################################################################################


echo "###################################################################################"

echo "0. 环境信息检查"

echo

echo "memory info"

grep MemTotal /proc/meminfo



echo

echo

echo "swap info"

grep SwapTotal /proc/meminfo


echo

echo

echo "tmp info"

df -h /tmp


echo

echo

echo "disk info"

df -h


echo

echo

echo "cpu info"

grep "model name" /proc/cpuinfo


echo

echo

echo "kernel info"

uname -a


echo

echo

echo "release info"

more /etc/redhat-release


RELEASE=`more /etc/redhat-release | awk '{print $1}'`


echo "###################################################################################"

echo

echo

echo


###################################################################################

## 1. 关闭多余的服务,提高操作系统性能和安全性

##  根据环境及需要自定义

###################################################################################


echo "###################################################################################"

echo "1. 关闭多余的服务,提高操作系统性能和安全性"

echo

chkconfig --level 345 bluetooth off

chkconfig --level 345 cups off

chkconfig --level 345 ip6tables off

chkconfig --level 345 iptables off

chkconfig --level 345 sendmail off


echo

echo


echo "turn off selinux"

SELINUX=`grep ^SELINUX= /etc/selinux/config`


if [ $SELINUX != "SELINUX=disabled" ];then

       cp /etc/selinux/config /etc/selinux/config.bak

       sed -i 's/^SELINUX=/#SELINUX=/g' /etc/selinux/config

sed -i '$a SELINUX=disabled' /etc/selinux/config

else

       echo "SELINUX is already disabled"

fi


echo

echo "###################################################################################"

echo

echo

echo


###################################################################################

## 2. 配置远程图形界面(Xmanager或VNC)

##  根据环境不同,需要进行手工配置,建议使用 Xmanager - Passive 或 VNC 方式

###################################################################################


## | 2.1 通过 xshell 方式登录

## | 打开 Xmanager - Passive 工具, 使用 Xshell 连接远程服务器

##

## | #export DISPLAY=客户端IP:0.0

## | #xclock


###################################################################################

## 3. 配置本地YUM源,安装操作系统补丁包

###################################################################################


echo "###################################################################################"

echo "3. 配置本地YUM源,安装操作系统补丁包"

echo


mkdir -p /media/cdrom

mount /dev/cdrom /media/cdrom

cd /etc/yum.repos.d/

mkdir bak

mv *.repo ./bak/

touch local.repo


# 注意RHEL和CENTOS的YUM配置方式有所不同,根据操作系统进行对应调整

# --RHEL

# [RHEL]

# name = RHEL

# baseurl=file:///media/cdrom/Server/

# gpgcheck=0

# enabled=1

#

# --CENTOS

# [CENTOS]

# name = CENTOS

# baseurl=file:///media/cdrom/

# gpgcheck=0

# enabled=1


cat >> local.repo << "EOF"

[LOCAL]

name=LOCAL

gpgcheck=0

enabled=1

EOF


echo

if [ $RELEASE = "CentOS" ];then

       sed -i '$a baseurl=file:\/\/\/media\/cdrom\/' local.repo

else

       sed -i '$a baseurl=file:\/\/\/media\/cdrom\/Server\/' local.repo

fi


echo

echo "install package"


yum install -y binutils  compat-db  compat-gcc-34  compat-gcc-34-c++  compat-libstdc++-296  compat-libstdc++-33  control-center  elfutils-libelf-devel  gcc  gcc-c++  gdb  gdbm  glibc  glibc-common  glibc-devel  glibc-headers  libgomp  libstdc++-devel  ksh  libaio  libaio-devel  libgcc  libgnome  libstdc++  libstdc++-devel  libXp  libXtst  make  openmotif  setarch  sysstat  unixODBC  unixODBC-devel  util-linux  xorg-x11-xinit


yum install -y compat-gcc-34 compat-gcc-34-c++ compat-libstdc++-33 compat-libstdc++-296 gcc gcc-c++ glibc-devel glibc-headers glibc libgomp libaio.i386 libgcc.i386 libstdc++-devel libXp libXtst openssl sysstat


echo "finish package install"


echo

echo

echo "check package info"


rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n' binutils compat-db compat-gcc-34 compat-gcc-34-c++ compat-libstdc++-33 compat-libstdc++-296 compat-libstdc++-33 control-center elfutils-libelf-devel gcc gcc-c++ gdb gdbm glibc glibc-common glibc-devel glibc-headers libgomp libstdc++-devel ksh libaio libaio-devel libgcc libgnome libgnomeui libgomp libstdc++ libstdc++-devel libXp libXtst make openmotif setarch sysstat unixODBC unixODBC-devel util-linux xorg-x11-xinit | grep "not installed"


echo

echo "###################################################################################"

echo

echo

echo


###################################################################################

## 4. 修改操作系统内核参数

###################################################################################


echo "###################################################################################"

echo "4. 修改操作系统内核参数"

echo


cp /etc/sysctl.conf /etc/sysctl.conf.bak


cat >> /etc/sysctl.conf << "EOF"

###################################################################################

# change for oracle install


fs.file-max = 6815744

fs.aio-max-nr = 3145728


kernel.msgmni = 2878

kernel.msgmax = 8192

kernel.msgmnb = 65536

kernel.sem = 250 32000 100 142


kernel.shmmax=34359738368

kernel.shmmni=4096

kernel.shmall=16777216

#vm.nr_hugepages=16384

#kernel.sysrq = 1


net.core.rmem_default = 1048576

net.core.wmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_max = 1048576


net.ipv4.tcp_rmem=4096 262144 4194304

net.ipv4.tcp_wmem=4096 262144 262144

net.ipv4.ip_local_port_range = 1024 65500

net.ipv4.tcp_keepalive_time=30

net.ipv4.tcp_keepalive_intvl=60

net.ipv4.tcp_keepalive_probes=9

net.ipv4.tcp_retries2=3

net.ipv4.tcp_syn_retries=2


vm.min_free_kbytes = 51200

vm.swappiness=20

vm.dirty_background_ratio=3

vm.dirty_ratio=15

vm.dirty_expire_centisecs=500

vm.dirty_writeback_centisecs=100


EOF

echo

echo


echo "make kernel change take effect"

/sbin/sysctl -p


echo

echo


echo "add hangcheck-timer mode"

cp /etc/modprobe.conf /etc/modprobe.conf.bak


cat >> /etc/modprobe.conf << "EOF"

options hangcheck-timer hangcheck_tick=1 hangcheck_margin=10 hangcheck_reboot=1

EOF

echo

echo


/sbin/modprobe -v hangcheck-timer


echo

echo

modprobe -l | grep -i hang


echo "###################################################################################"

echo

echo

echo


###################################################################################

## 5. 配置共享存储

##  需要手工完成,通过脚本查看磁盘的scsi_id信息和分区大小

###################################################################################


# # vi diskinfo.sh

# > diskinfo.tmp

#

# for i in a b c d e f g h i j k l m n o p q r s t u v w x y z;

# do

#         diskinfo=`fdisk -l /dev/sd$i | grep "Disk /dev/sd$i"`

#         echo 'scsi_id:' `scsi_id -gus /block/sd$i` $diskinfo | awk -F',' '{print $1}' >> diskinfo.tmp

# done

#

# sort diskinfo.tmp > diskinfo.rs

# more diskinfo.rs

# rm -f diskinfo.tmp


###################################################################################

## 6. 创建 oracle 用户及安装目录

###################################################################################


echo "###################################################################################"

echo "6. 创建 oracle 用户及安装目录"

echo


echo "创建oracle用户及组"

/usr/sbin/groupadd -g 500 oinstall

/usr/sbin/groupadd -g 501 dba

/usr/sbin/useradd -u 500 -g oinstall -G dba  oracle

echo oracle | passwd --stdin oracle


echo

echo "创建oracle安装目录"

mkdir -p /u01/app/oracle

chown -R oracle:oinstall /u01/app/oracle

chmod -R 775 /u01/app/oracle


echo

echo "修改oracle用户会话限制"

cp /etc/security/limits.conf /etc/security/limits.conf.bak


cat >> /etc/security/limits.conf << "EOF"

#########################################

#add for oracle

oraclesoftnofile131072

oraclehardnofile131072

oraclesoftnproc131072

oraclehardnproc131072

oraclesoftcoreunlimited

oraclehardcoreunlimited

oraclesoftmemlock50000000

oraclehardmemlock50000000

EOF

echo


echo

cp /etc/pam.d/login /etc/pam.d/login.bak


cat >> /etc/pam.d/login << "EOF"

##############################################

#add for oracle

session required pam_limits.so

EOF

echo


echo

echo "修改oracle用户资源限制"

cp /etc/profile /etc/profile.bak


cat >> /etc/profile << "EOF"

#########################################

#add for oracle

if [ $USER = "oracle" ]; then

if [ $SHELL = "/bin/ksh"  ]; then

ulimit -p 16384

ulimit -n 65536

else

ulimit -u 16384 -n 65536

fi

umask 022

fi

EOF

echo


echo

echo "编辑oracle用户环境变量"


cp /home/oracle/.bash_profile /home/oracle/.bash_profile.bak


cat >> /home/oracle/.bash_profile << "EOF"

#########################################

export LANG=C


export ORACLE_BASE=/u01/app/oracle

export CRS_HOME=$ORACLE_BASE/product/10.2.0/crs

export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1

export ORACLE_SID=


export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"


export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$CRS_HOME/bin:/usr/sbin:/sbin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib


umask 022

EOF

echo


###################################################################################

## 7. 重启操作系统进行修改验证

##  需要人工干预

###################################################################################


###################################################################################

## 检查修改信息

###################################################################################

echo "###################################################################################"

echo "检查修改信息"

echo

echo "-----------------------------------------------------------------------------------"

echo "/etc/selinux/config"

cat /etc/selinux/config

echo

echo "-----------------------------------------------------------------------------------"

echo "/etc/sysctl.conf"

cat /etc/sysctl.conf

echo

echo "-----------------------------------------------------------------------------------"

echo "/etc/modprobe.conf"

cat /etc/modprobe.conf

echo

echo "-----------------------------------------------------------------------------------"

echo "/etc/security/limits.conf"

cat /etc/security/limits.conf

echo

echo "-----------------------------------------------------------------------------------"

echo "/etc/pam.d/login"

cat /etc/pam.d/login

echo

echo "-----------------------------------------------------------------------------------"

echo "/etc/profile"

cat /etc/profile

echo

echo "-----------------------------------------------------------------------------------"

echo "/home/oracle/.bash_profile"

cat /home/oracle/.bash_profile

echo


echo "完成安装初始化配置"