自动配置Oracle 11g安装环境的shell脚本
问题:经常需要安装Oracle数据库服务器,系统为RedHat 6.3。开始安装Oracle前需要修改诸多配置文件,创建帐号、用户组等准备工作,也要检查依赖的包是否齐全,每次都要重复一遍
解决:
1、检查hostname,修改/etc/hosts文件
1 hostname=`hostname` 2 hostip=`hostname --all-ip-address` 3 4 if [ $hostname = "localhost.localdomain" ] 5 then 6 echo "current hostname is localhost.localdomain, please rename in file /etc/sysconfig/network, then restart computer" 7 exit 8 else 9 if [ `grep ${hostname} /etc/hosts | wc -l` -gt 0 ] 10 then 11 echo "hostname ${hostname} is exist in file /etc/hosts" 12 else 13 cp /etc/hosts /etc/hosts.bak 14 echo ${hostip}" "${hostname} >> /etc/hosts 15 fi 16 fi
2、创建oinstall,dba用户组
1 if [ `grep "^oinstall:" /etc/group | wc -l` -gt 0 ] 2 then 3 echo "oinstall group is exist" 4 else 5 groupadd oinstall 6 echo "oinstall group is created" 7 fi 8 if [ `grep "^dba:" /etc/group | wc -l` -gt 0 ] 9 then 10 echo "dba group is exist" 11 else 12 groupadd dba 13 echo "dba group is created" 14 fi
3、创建oracle用户,加入oinstall和dba用户组
1 if [ `grep "^oracle:" /etc/passwd | wc -l` -gt 0 ] 2 then 3 echo "oracle user is exist" 4 else 5 useradd oracle -g oinstall -G dba 6 echo "oracle user is created" 7 echo -e "password\password" | passwd oracle 8 echo "oracle password is updated" 9 fi
4、修改/etc/sysctl.conf内核参数并生效
1 # kernel.shmall取总内存的页数(每页4K),kernel.shmmax取内存的一半 2 if [ `grep "^net.core.wmem_max" /etc/sysctl.conf | wc -l` -gt 0 ] 3 then 4 echo "/etc/sysctl.conf file is modified" 5 else 6 cp /etc/sysctl.conf /etc/sysctl.conf.bak 7 sed -i "s/kernel.shmall/# kernel.shmall/g" /etc/sysctl.conf 8 sed -i "s/kernel.shmmax/# kernel.shmmax/g" /etc/sysctl.conf 9 10 total=`awk '/MemTotal/{print $2}' /proc/meminfo` 11 shmall=$(($total / 4)) 12 shmmax=$(($total * 512)) 13 14 echo "" >> /etc/sysctl.conf 15 echo "# Oracle11g" >> /etc/sysctl.conf 16 echo "fs.aio-max-nr = 1048576" >> /etc/sysctl.conf 17 echo "fs.aio-max-nr = 1048576" >> /etc/sysctl.conf 18 echo "fs.file-max = 6815744" >> /etc/sysctl.conf 19 echo "kernel.shmall = "${shmall} >> /etc/sysctl.conf 20 echo "kernel.shmmax = "${shmmax} >> /etc/sysctl.conf 21 echo "kernel.shmmni = 4096" >> /etc/sysctl.conf 22 echo "kernel.sem = 250 32000 100 128" >> /etc/sysctl.conf 23 echo "net.ipv4.ip_local_port_range = 9000 65500" >> /etc/sysctl.conf 24 echo "net.core.rmem_default = 262144" >> /etc/sysctl.conf 25 echo "net.core.rmem_max = 4194304" >> /etc/sysctl.conf 26 echo "net.core.wmem_default = 262144" >> /etc/sysctl.conf 27 echo "net.core.wmem_max = 1048586" >> /etc/sysctl.conf 28 sysctl -p 29 fi
5、修改/etc/security/limits.conf配置文件
1 if [ `grep "^oracle soft nproc 2047" /etc/security/limits.conf | wc -l` -gt 0 ] 2 then 3 echo "/etc/security/limits.conf file is modified" 4 else 5 cp /etc/security/limits.conf /etc/security/limits.conf.bak 6 echo "oracle soft nproc 2047" >> /etc/security/limits.conf 7 echo "oracle hard nproc 16384" >> /etc/security/limits.conf 8 echo "oracle soft nofile 1024" >> /etc/security/limits.conf 9 echo "oracle hard nofile 65536" >> /etc/security/limits.conf 10 fi
6、修改/etc/pam.d/login配置文件
1 if [ `grep "^session required pam_limits.so" /etc/pam.d/login | wc -l` -gt 0 ] 2 then 3 echo "/etc/pam.d/login file is modified" 4 else 5 cp /etc/pam.d/login /etc/pam.d/login.bak 6 echo "session required pam_limits.so" >> /etc/security/limits.conf 7 fi
7、创建ORACLE_BASE ORACLE_HOME TMP目录,并赋相应权限
1 if [ ! -d "/u01/app/oracle/product/11.2.0/db_1" ] 2 then 3 mkdir -p /u01/app/oracle/product/11.2.0/db_1 4 chown -R oracle:oinstall /u01/ 5 chmod -R 775 /u01/ 6 mkdir /tmp/oracle 7 chown -R oracle:oinstall /tmp/oracle 8 chmod -R 775 /tmp/oracle 9 else 10 echo "directory /u01/app/oracle/product/11.2.0/db_1 is exist" 11 fi
8、修改oracle用户环境变量配置文件.bash_profile
1 if [ `grep "export ORACLE_TERM=xterm" /home/oracle/.bash_profile | wc -l` -gt 0 ] 2 then 3 echo "variable ORACLE_TERM=xterm is exist" 4 else 5 cp /home/oracle/.bash_profile /home/oracle/.bash_profile.bak 6 echo "" >> /home/oracle/.bash_profile 7 echo "#Oracle" >> /home/oracle/.bash_profile 8 echo "umask 022" >> /home/oracle/.bash_profile 9 echo "TMP=/tmp; export TMP" >> /home/oracle/.bash_profile 10 echo "TMPDIR=\$TMP; export TMPDIR" >> /home/oracle/.bash_profile 11 echo "export ORACLE_BASE=/u01/app/oracle" >> /home/oracle/.bash_profile 12 echo "export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1" >> /home/oracle/.bash_profile 13 echo "export PATH=\$ORACLE_HOME/Apache/perl/bin:\$ORACLE_HOME/bin:\$ORACLE_HOME/Apache/Apache/bin:\$PATH" >> /home/oracle/.bash_profile 14 echo "export ORACLE_OWNER=oracle" >> /home/oracle/.bash_profile 15 echo "export ORACLE_SID=orcl" >> /home/oracle/.bash_profile 16 echo "export ORACLE_TERM=xterm" >> /home/oracle/.bash_profile 17 echo "unset USERNAME" >> /home/oracle/.bash_profile 18 fi
9、检查安装Oracle依赖的15个安装包,版本未要求完全一致或更新;若yum安装出现问题,参考
1 # Redhat 6.3的iso中没有pdksh,需要使用命令rpm -e ksh卸载系统默认安装的ksh,再使用命令rpm -i pdksh安装下载的包 2 packages="binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel pdksh " 3 packages=${packages}"libgcc libstdc++ libstdc++-devel libaio libaio-devel make sysstat tigervnc tigervnc-server" 4 versions=("2.20" "1.10" "3.2" "4.4" "4.4" "2.12" "2.12" "5.2" "4.4" "4.4" "4.4" "0.3" "0.3" "3.81" "9.0" "1.0" "1.0") 5 6 i=0 7 for package in $packages 8 do 9 packageversion=${package}"-"${versions[i]} 10 if [ `rpm -qa | grep $packageversion | wc -l` -ne 0 ] 11 then 12 echo ${i}": Exists the package:$packageversion" 13 else 14 if [ `rpm -qa | grep $package | wc -l` -ne 0 ] 15 then 16 installed=`rpm -qa | grep $package` 17 echo ${i}": Not exist the package like:$packageversion" 18 echo "But exists other versions:" 19 echo "$installed" 20 else 21 echo ${i}": Installing the package:$package" 22 yum install $package 23 fi 24 fi 25 i=$(($i + 1)) 26 done
浙公网安备 33010602011771号