RAC环境部署自动化shell脚本
RAC环境部署自动化shell脚本
富士康质检员张全蛋 2018-03-26 14:48:59 301 收藏 1
分类专栏: ORACLE RAC+ASM
版权
下面是一个rac搭建时候的一个环境自动部署脚本,这个脚本可以自动帮你完成安装数据库需要的包,创建oracle,grid用户,并且配置环境变量,已经配置操作系统参数,大部分工作都可以完成,可以根据自己需要修改该脚本。该脚本运行选择(2) ios,指定.iso镜像文件的绝对路径就可以自动部署环境了(.ios文件需要你手动上传到服务器上面)。(该脚本可以根据自己需要来修改)
#!/bin/bash
# This program configure the enviroment for oracle database(version 11.2.0.4 64bit) on your system
# 2013-10-21 zfsoft First release
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#variables
service=oradb
orapwd=oracle
gridpwd=grid
rac1=$rac1
rac1priv=$rac1-priv
rac2=$rac2
rac2priv=$rac2-priv
scan=scan
cat >> /etc/hosts <<EOF
10.1.70.158 $rac1
10.1.70.161 $rac1-vip
11.1.1.1 $rac1-priv
10.1.70.159 $rac2
10.1.70.162 $rac2-vip
11.1.1.2 $rac2-priv
10.1.70.163 $scan
EOF
isdvd=no
function alert() {
echo -e "$1"
exit -1
}
echo "*******************************************************************"
echo " System environment check "
neededPackage="binutils compat-libstdc++-33 compat-libstdc++-296 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers libaio libaio-devel libgcc libstdc++ libstdc++-devel make openmotif sysstat unixODBC unixODBC-devel compat-libcap1"
missing=$(rpm -q $neededPackage| grep "not installed")
#test -z "$missing" && echo "package check passed" || alert "${missing} \\n please install the package above then rerun this program"
if [ -z "$missing" ]; then
echo "package check passed"
else
echo -e "${missing} \\n Please insert the os install Disc or upload the iso."
echo "Where is your operation system installation media?"
select media in "dvd Disc" "iso" ;do
if [ "$media" == "dvd Disc" ] || [ "$media" == "iso" ]; then
break
fi;
done
echo "You have selected $media"
mkdir /mnt/dvd
if [ "$media" == "dvd Disc" ]; then
isdvd=yes
mount /dev/cdrom /mnt/dvd
else
read -p "Where is the iso?(in absolute path,e.g., /u01/rhel-server-6.4-x86_64-dvd.iso)" isopath
mount "$isopath" -o loop /mnt/dvd
fi;
test $? != 0 && alert "Error occured while mounting the media,please check and try again!"
test -d /etc/yum.repos.d/bak && mv -f /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak || mkdir /etc/yum.repos.d/bak
cat >/etc/yum.repos.d/rhel6.repo<<EOF
[dvd]
name=dvd
baseurl=file:///mnt/dvd
enabled=1
gpgcheck=0
EOF
yum install $neededPackage -y
fi
groupadd -g 600 oinstall
groupadd -g 601 asmadmin
groupadd -g 602 asmdba
groupadd -g 603 asmoper
useradd -u 600 -g oinstall -G asmadmin,asmdba,asmoper grid
id grid
echo "$gridpwd" | passwd grid --stdin
groupadd -g 604 dba
groupadd -g 605 oper
useradd -u 601 -g oinstall -G dba,oper,asmdba oracle
id oracle
echo "$orapwd" | passwd oracle --stdin
#[ $? != 0 ] && alert "Error occured where create oracle users,please check"
echo "Disable the iptables and selinux"
service iptables stop
chkconfig iptables off
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#modify the size of /dev/shm(default is half of physical memory,11g auto memory management need the /dev/shm greater or equal memory_target)
[ -f /etc/fstab.bak ] || cp /etc/fstab /etc/fstab.bak
[ -f /etc/rc.d/rc.sysinit.bak ] || cp /etc/rc.d/rc.sysinit /etc/rc.d/rc.sysinit.bak
#num=`cat -n /etc/fstab | grep /dev/shm | awk '{ print $1 }'`
tootalMem=`free -m | grep Mem: |sed 's/^Mem:\s*//'| awk '{print $1}'`
[ $tootalMem -lt 1000 ] && alert "The physical memory is ${tootalMem}M,oracle requires at least 1G" || echo "Your physical memory is ${tootalMem} (in MB)"
num=`grep -n /dev/shm /etc/fstab | awk -F: '{ print $1 }'`
declare -i newSize=$tootalMem*80/100+400 #at least plus 10
sed -i "${num}s/defaults.*/defaults,size=${newSize}M 0 0/" /etc/fstab
#num=`cat -n /etc/rc.d/rc.sysinit | grep "mount -f /dev/shm" | awk '{ print $1 }'`
num=`grep -n "mount -f /dev/shm" /etc/rc.d/rc.sysinit | awk -F: '{ print $1 }'`
sed -i "${num}s/mount/#mount/" /etc/rc.d/rc.sysinit
mount -o remount tmpfs
test $? != 0 && alert "Error occured while remounting the tmpfs,please check!!!"
sed -i 's/\-t nonfs,nfs4/\-t tmpfs,nonfs,nfs4/' /etc/rc.d/rc.sysinit
cat >>/etc/sysctl.conf<<EOF
#required by oracle
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
#10g is 65536
fs.file-max = 6815744
#10g is 1024 65000
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
#10g is 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
#10g is 262144
net.core.wmem_max = 1048576
#no need by 10g
fs.aio-max-nr = 1048576
EOF
sysctl -p
cat >> /etc/security/limits.conf <<EOF
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
EOF
#print
chkconfig cups off
chkconfig hplip off
#selinux
chkconfig mcstrans off
chkconfig setroubleshoot off
#bluetooth
chkconfig hidd off
chkconfig bluetooth off
chkconfig ip6tables off
chkconfig iptables off
chkconfig sendmail off
chkconfig yum-updatesd off
#check the node number
[ $(hostname | grep 1$) ] && nodenum=1 || nodenum=2 && echo number $nodenum node
sed -i '10,$d' ~grid/.bash_profile
cat >>~grid/.bash_profile<<EOF
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
export ORACLE_SID=+ASM$nodenum
export JAVA_HOME=\$ORACLE_HOME/jdk
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:\$ORACLE_HOME/ctx/lib:\$ORACLE_HOME/oracm/lib
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib:\$ORACLE_HOME/network/jlib
export PATH=\$PATH:\$ORACLE_HOME/bin
EOF
sed -i '10,$d' ~oracle/.bash_profile
cat >>~oracle/.bash_profile<<EOF
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=$service$nodenum
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:\$ORACLE_HOME/oracm/lib:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE/rdbms/jlib:\$ORACLE_HOME/network/jlib
export PATH=\$PATH:\$ORACLE_HOME/bin
EOF
mkdir -p /u01/app/oracle
mkdir -p /u01/app/grid
mkdir -p /u01/app/11.2.0/grid
chown -R oracle:oinstall /u01
chown -R grid:oinstall /u01/app
chown oracle:oinstall /u01/app/oracle
chown -R grid:oinstall /u01/app/11.2.0/grid
[ "$nodenum" == 1 ] && exit
echo "---------------Configure ssh conectivity----------------"
cat >/u01/sshUserSetup.sh<<EOF
#!/bin/bash
ssh-keygen -f ~/.ssh/id_rsa -N ''
ssh-copy-id $rac1
cp .ssh/id_rsa.pub .ssh/authorized_keys
ssh $rac1 "ssh-keygen -f ~/.ssh/id_rsa -N ''"
ssh $rac1 cat .ssh/id_rsa.pub>>.ssh/authorized_keys
scp .ssh/authorized_keys $rac1:.ssh
ssh $rac1 date;ssh $rac1priv date;ssh $rac2 date;ssh $rac2priv date;
scp .ssh/known_hosts $rac1:.ssh
echo -e "Run the following command as the user(you have just executed /u01/sshUserSetup.sh) on rac1 to test ssh conectivity\n ssh $rac1 date;ssh $rac1priv date;ssh $rac2 date;ssh $rac2priv date"
EOF
chmod o+x /u01/sshUserSetup.sh
echo -e "Run the following command as grid and oracle user on rac2 to setup ssh conectivity\n /u01/sshUserSetup.sh"
[root@ASMTEST u01]# chmod 777 en.sh
[root@ASMTEST u01]# ./en.sh
*******************************************************************
System environment check
package compat-libstdc++-296 is not installed
package openmotif is not installed
Please insert the os install Disc or upload the iso.
Where is your operation system installation media?
1) dvd Disc
2) iso
#? 2
You have selected iso
Where is the iso?(in absolute path,e.g., /u01/rhel-server-6.4-x86_64-dvd.iso)/u01/rhel6.4.iso
记住这里将服务器上的镜像文件位置写上,后面环境就自动部署了。
————————————————
版权声明:本文为CSDN博主「富士康质检员张全蛋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34556414/article/details/79697929