#!/bin/bash###################################################################### 说明 ##1、前提条件新建oracle用户和组,将安装包上传到oracle用户下解压 ##2、内核参数值固定,可自行在脚本中更改 ##3、字符集固定为ZHS16GBK,安装版本固定为企业版 ##4、实例名和全局变量名一致,可设置 ##5、Oracle_BASE默认设置为/home/oracle #######################################################################使用方法如下:'1、首先需要新建一个dba组和oracle用户,然后将oracle的安装包以oracle用户上传到/home/oracle下并进行解压,解压出来的文件夹名用database2、以root用户上传脚本,目录无限制。3、执行脚本即可。脚本执行过程中会进行rpm包的检查,对于rpm包缺少会在标红位置进行提醒,需要自己手动去安装基本参数配置完成后,脚本提示需要输入要安装oracle的实例名,输入完成后,再输入Y进行确认,然后进入到oracle软件的静默安装,提示的两个脚本会自动执行,无需手动操作当看到安装成功字样后,进行监听的静默安装,看到返回值0表明安装成功监听安装完成后进入到数据库实例的创建,看到100%完成后,表明实例创建完成到这里为止oracle安装完成,可以直接使用了,后续脚本对oracle进行了包括审计、优化器、连接数等的优化'#hosts文件添加,请手动添加,高版本系统不能使用一下命令:'local_ip=`ifconfig eno16777736 | grep Bcast | cut -d : -f2 | cut -d " " -f1`local_name=`hostname`cat /etc/hosts | grep $local_ip >/dev/nullif [ $? != 0 ];then echo "$local_ip $local_name" >>/etc/hostselse sed -i '/'$local_ip'/d' /etc/hosts echo "$local_ip $local_name" >>/etc/hostsfi'jishu=0#RPM包准备echo "Start checking rpm software installation......"rpm -qa | grep binutils >/dev/nullif [ $? != 0 ];then echo "binutils rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep compat-libcap1 >/dev/nullif [ $? != 0 ];then echo "compat-libcap1 rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep compat-libstdc++-33 >/dev/nullif [ $? != 0 ];then echo "compat-libstdc++-33 rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep elfutils-libelf >/dev/nullif [ $? != 0 ];then echo "elfutils-libelf rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^gcc >/dev/nullif [ $? != 0 ];then echo "gcc rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^gcc-c++ >/dev/nullif [ $? != 0 ];then echo "gcc-c++ rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^glibc >/dev/nullif [ $? != 0 ];then echo "glibc rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^glibc-devel >/dev/nullif [ $? != 0 ];then echo "glibc rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^libaio >/dev/nullif [ $? != 0 ];then echo "libaio rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^libaio-devel >/dev/nullif [ $? != 0 ];then echo "libaio-devel rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^libgcc >/dev/nullif [ $? != 0 ];then echo "libgcc rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^libstdc >/dev/nullif [ $? != 0 ];then echo "libstdc rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^libstdc++ >/dev/nullif [ $? != 0 ];then echo "libstdc++ rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^libstdc++-devel >/dev/nullif [ $? != 0 ];then echo "libstdc++-devel rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^libXi >/dev/nullif [ $? != 0 ];then echo "libXi rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^libXtst >/dev/nullif [ $? != 0 ];then echo "libXtst rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^make >/dev/nullif [ $? != 0 ];then echo "make rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^numactl >/dev/nullif [ $? != 0 ];then echo "numactl rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ^sysstat >/dev/nullif [ $? != 0 ];then echo "sysstat rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep unixODBC >/dev/nullif [ $? != 0 ];then echo "unixODBC rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep unixODBC-devel >/dev/nullif [ $? != 0 ];then echo "unixODBC-devel rpm software is not exist.Please check again." let jishu=jishu+1firpm -qa | grep ksh >/dev/nullif [ $? != 0 ];then echo "ksh rpm software is not exist.Please check again." let jishu=jishu+1fi#rpm -qa | grep pdksh >/dev/null#if [ $? != 0 ];then# echo "pdksh rpm software is not exist.Please check again."# let jishu=jishu+1#fiecho "Software inspenction is finished !"if [ $jishu != 0 ];then exitfi#配置核心参数cat /etc/sysctl.conf | grep fs.aio-max-nr >/dev/nullif [ $? != 0 ];then echo "fs.aio-max-nr = 1048576" >>/etc/sysctl.confficat /etc/sysctl.conf | grep fs.file-max >/dev/nullif [ $? != 0 ];then echo "fs.file-max = 6815744" >>/etc/sysctl.confficat /etc/sysctl.conf | grep kernel.shmall >/dev/nullif [ $? != 0 ];then echo "kernel.shmall = 2097152" >>/etc/sysctl.confficat /etc/sysctl.conf | grep kernel.shmmax >/dev/nullif [ $? != 0 ];then echo "kernel.shmmax = 536870912" >>/etc/sysctl.confficat /etc/sysctl.conf | grep kernel.shmmni >/dev/nullif [ $? != 0 ];then echo "kernel.shmmni = 4096" >>/etc/sysctl.confficat /etc/sysctl.conf | grep kernel.sem >/dev/nullif [ $? != 0 ];then echo "kernel.sem = 250 32000 100 128" >>/etc/sysctl.confficat /etc/sysctl.conf | grep net.ipv4.ip_local_port_range >/dev/nullif [ $? != 0 ];then echo "net.ipv4.ip_local_port_range = 9000 65500" >>/etc/sysctl.confficat /etc/sysctl.conf | grep net.core.rmem_default >/dev/nullif [ $? != 0 ];then echo "net.core.rmem_default = 262144" >>/etc/sysctl.confficat /etc/sysctl.conf | grep net.core.rmem_max >/dev/nullif [ $? != 0 ];then echo "net.core.rmem_max = 4194304" >>/etc/sysctl.confficat /etc/sysctl.conf | grep net.core.wmem_default >/dev/nullif [ $? != 0 ];then echo "net.core.wmem_default = 262144" >>/etc/sysctl.confficat /etc/sysctl.conf | grep net.core.wmem_max >/dev/nullif [ $? != 0 ];then echo "net.core.wmem_max = 1048586" >>/etc/sysctl.conffi/sbin/sysctl -p#设置Oracle用户参数cat /etc/security/limits.conf |grep oracle >/dev/nullif [ $? != 0 ];then echo "oracle soft nproc 2047" >>/etc/security/limits.conf echo "oracle hard nproc 16384" >>/etc/security/limits.conf echo "oracle soft nofile 1024" >>/etc/security/limits.conf echo "oracle hard nofile 65536" >>/etc/security/limits.confficat /etc/pam.d/login | grep pam_limits.so >/dev/nullif [ $? != 0 ];then sysbit=`getconf LONG_BIT` if [ $sysbit = 32 ];then echo "session required /lib/security/pam_limits.so" >>/etc/pam.d/login echo "session required pam_limits.so" >>/etc/pam.d/login else echo "session required pam_limits.so" >>/etc/pam.d/login fificat /etc/profile | grep oracle >/dev/nullif [ $? != 0 ];then echo 'if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fifi' >>/etc/profilefi#创建Oracle用户、组、安装目录# cat /etc/group | grep dba >/dev/null# if [ $? != 0 ];then # groupadd dba# fi# cat /etc/passwd | grep oracle >/dev/null# if [ $? != 0 ];then # useradd -g dba oracle -d /home/oracle# else # userdel -r oracle # useradd -g dba oracle -d /home/oracle# fi# passwd oracle <<EOF# oracle# oracle# EOFmkdir -p /home/oracle/oradatamkdir -p /home/oracle/oraInventorychown -R oracle:dba /home/oracle/oradata/ /home/oracle/oraInventory/chmod -R 755 /home/oracle/oradata/ /home/oracle/oraInventory/#配置oracle用户环境变量if [ ! -f /home/oracle/.bash_profile ];then echo "The oracle's file of .bash_profile is not exist."else cat /home/oracle/.bash_profile | grep ORACLE_BASE >/dev/null if [ $? != 0 ];then echo 'export ORACLE_BASE=/home/oracleexport ORACLE_HOME=/home/oracle/product/11gR2export ORACLE_SID=ora11gexport LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64export PATH=$PATH:$ORACLE_HOME/bin:.export LANG=Cexport NLS_LANG=AMERICAN_AMERICA.ZHS16GBK' >>/home/oracle/.bash_profile su - oracle -c "source /home/oracle/.bash_profile" fifi#echo 'Oracle configure completely !'#响应文件配置if [ -d /home/oracle/database ];then chmod -R 755 /home/oracle/database cp /home/oracle/database/response/* /home/oracle/else echo "Oracle install file is not exist !" exitfiif [ ! -f /home/oracle/db_install.rsp ];then echo "db_install.rsp file is not exist !" exitfiif [ ! -f /home/oracle/dbca.rsp ];then echo "dbca.rsp file is not exist !" exitfiif [ ! -f /home/oracle/netca.rsp ];then echo "netca.rsp file is not exist !" exitfiecho ""echo "##########################################"while [ 0 ]do echo -n "--Please input oracle sid:" read oracle_sid echo "ORACLE SID : $oracle_sid" echo -n "Are you sure (Y/N)?" read confirmation if [ $confirmation = Y ];then break fidoneoracle_sid_old=`cat /home/oracle/.bash_profile | grep ORACLE_SID`oracle_sid_new="export ORACLE_SID=$oracle_sid"sed -i 's/'"$oracle_sid_old"'/'"$oracle_sid_new"'/g' /home/oracle/.bash_profileoracle_home_old=`cat /home/oracle/.bash_profile | grep product`oracle_home_new="export ORACLE_HOME=/home/oracle/product/$oracle_sid"sed -i 's%'"$oracle_home_old"'%'"$oracle_home_new"'%g' /home/oracle/.bash_profilesu - oracle -c "source /home/oracle/.bash_profile"cat /home/oracle/db_install.rsp | grep oracle.install.option=INSTALL_DB_SWONLY >/dev/nullif [ $? != 0 ];then value_old=`cat /home/oracle/db_install.rsp | grep oracle.install.option` value_new="oracle.install.option=INSTALL_DB_SWONLY" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/db_install.rspficat /home/oracle/db_install.rsp | grep ORACLE_HOSTNAME >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/db_install.rsp | grep ORACLE_HOSTNAME` value_new="ORACLE_HOSTNAME=`hostname`" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/db_install.rspficat /home/oracle/db_install.rsp | grep UNIX_GROUP_NAME >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/db_install.rsp | grep UNIX_GROUP_NAME` value_new="UNIX_GROUP_NAME=dba" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/db_install.rspficat /home/oracle/db_install.rsp | grep INVENTORY_LOCATION >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/db_install.rsp | grep INVENTORY_LOCATION` value_new="INVENTORY_LOCATION=/home/oracle/oraInventory" sed -i 's%'"$value_old"'%'"$value_new"'%g' /home/oracle/db_install.rspficat /home/oracle/db_install.rsp | grep ORACLE_HOME >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/db_install.rsp | grep ORACLE_HOME` value_new="ORACLE_HOME=/home/oracle/product/$oracle_sid" sed -i 's%'"$value_old"'%'"$value_new"'%g' /home/oracle/db_install.rspficat /home/oracle/db_install.rsp | grep ORACLE_BASE >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/db_install.rsp | grep ORACLE_BASE` value_new="ORACLE_BASE=/home/oracle" sed -i 's%'"$value_old"'%'"$value_new"'%g' /home/oracle/db_install.rspficat /home/oracle/db_install.rsp | grep oracle.install.db.InstallEdition >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/db_install.rsp | grep oracle.install.db.InstallEdition` value_new="oracle.install.db.InstallEdition=EE" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/db_install.rspficat /home/oracle/db_install.rsp | grep oracle.install.db.DBA_GROUP >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/db_install.rsp | grep oracle.install.db.DBA_GROUP` value_new="oracle.install.db.DBA_GROUP=dba" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/db_install.rspficat /home/oracle/db_install.rsp | grep oracle.install.db.OPER_GROUP >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/db_install.rsp | grep oracle.install.db.OPER_GROUP` value_new="oracle.install.db.OPER_GROUP=dba" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/db_install.rspficat /home/oracle/db_install.rsp | grep oracle.install.db.config.starterdb.characterSet >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/db_install.rsp | grep oracle.install.db.config.starterdb.characterSet` value_new="oracle.install.db.config.starterdb.characterSet=ZHS16GBK" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/db_install.rspficat /home/oracle/db_install.rsp | grep oracle.install.db.config.starterdb.password.SYS >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/db_install.rsp | grep oracle.install.db.config.starterdb.password.SYS | grep -v SYSTEM | grep -v SYSMAN` value_new="oracle.install.db.config.starterdb.password.SYS=oracle" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/db_install.rsp value_old=`cat /home/oracle/db_install.rsp | grep oracle.install.db.config.starterdb.password.SYSTEM` value_new="oracle.install.db.config.starterdb.password.SYSTEM=oracle" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/db_install.rsp value_old=`cat /home/oracle/db_install.rsp | grep oracle.install.db.config.starterdb.password.SYSMAN` value_new="oracle.install.db.config.starterdb.password.SYSMAN=oracle" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/db_install.rsp value_old=`cat /home/oracle/db_install.rsp | grep oracle.install.db.config.starterdb.password.DBSNMP` value_new="oracle.install.db.config.starterdb.password.DBSNMP=oracle" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/db_install.rspficat /home/oracle/db_install.rsp | grep DECLINE_SECURITY_UPDATES >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/db_install.rsp | grep DECLINE_SECURITY_UPDATES | grep -v Example` value_new="DECLINE_SECURITY_UPDATES=true" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/db_install.rspficat /home/oracle/dbca.rsp | grep ^GDBNAME >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/dbca.rsp | grep ^GDBNAME |head -n 1` value_new="GDBNAME = \"$oracle_sid\"" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/dbca.rspficat /home/oracle/dbca.rsp | grep ^SID >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/dbca.rsp | grep ^SID` value_new="SID = \"$oracle_sid\"" sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/dbca.rspficat /home/oracle/dbca.rsp | grep SYSPASSWORD | grep -v Name >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/dbca.rsp | grep SYSPASSWORD | grep -v Name` value_new='SYSPASSWORD = "oracle"' sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/dbca.rspficat /home/oracle/dbca.rsp | grep SYSTEMPASSWORD | grep -v Name >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/dbca.rsp | grep SYSTEMPASSWORD | grep -v Name` value_new='SYSTEMPASSWORD = "oracle"' sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/dbca.rspficat /home/oracle/dbca.rsp | grep DATAFILEDESTINATION | grep -v Name >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/dbca.rsp | grep DATAFILEDESTINATION | grep -v Name` value_new='DATAFILEDESTINATION = /home/oracle/oradata' sed -i 's%'"$value_old"'%'"$value_new"'%g' /home/oracle/dbca.rspficat /home/oracle/dbca.rsp | grep RECOVERYAREADESTINATION | grep -v Name >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/dbca.rsp | grep RECOVERYAREADESTINATION | grep -v Name` value_new='RECOVERYAREADESTINATION= /home/oracle/flash_recovery_area' sed -i 's%'"$value_old"'%'"$value_new"'%g' /home/oracle/dbca.rspficat /home/oracle/dbca.rsp | grep CHARACTERSET | grep -v NATIONALCHARACTERSET | grep -v Name >/dev/nullif [ $? = 0 ];then value_old=`cat /home/oracle/dbca.rsp | grep CHARACTERSET | grep -v NATIONALCHARACTERSET | grep -v Name` value_new='CHARACTERSET = "ZHS16GBK"' sed -i 's/'"$value_old"'/'"$value_new"'/g' /home/oracle/dbca.rspfi#静默安装oracle软件chmod 777 /home/oracle/db_install.rsp /home/oracle/dbca.rsp /home/oracle/netca.rspchown oracle:dba /home/oracle/db_install.rsp /home/oracle/dbca.rsp /home/oracle/netca.rspsu - oracle <<EOFcd /home/oracle/database./runInstaller -silent -ignorePrereq -showProgress -responseFile /home/oracle/db_install.rspEOFwhile [ 0 ]do if [ -d /home/oracle/oraInventory/logs ];then cat /home/oracle/oraInventory/logs/oraInstall*.out | grep "Successfully Setup Software" >/dev/null if [ $? = 0 ];then sh /home/oracle/oraInventory/orainstRoot.sh sh /home/oracle/product/$oracle_sid/root.sh sleep 10 break fi fi sleep 30done#静默安装监听su - oracle <<EOFnetca -silent -responseFile /home/oracle/netca.rspEOFsleep 120#静默安装实例su - oracle <<EOFdbca -silent -responseFile /home/oracle/dbca.rspEOFwhile [ 0 ]do if [ -f /home/oracle/cfgtoollogs/dbca/$oracle_sid/$oracle_sid.log ];then cat /home/oracle/cfgtoollogs/dbca/$oracle_sid/$oracle_sid.log | grep "Database creation complete" >/dev/null if [ $? = 0 ];then sleep 10 break fi fi sleep 30done#oracle 11g的性能优化su - oracle <<EOFsqlplus / as sysdbaalter system set OPTIMIZER_MODE=RULE scope=both;alter system set deferred_segment_creation=FALSE scope=both;alter system set audit_trail=none scope=spfile;truncate table aud$;alter system set event= '10949 trace name context forever, level 1' scope=spfile;alter system set processes=500 scope=spfile;alter system set sessions=555 scope=spfile;shutdown immediate;startup;EOF#生成配置文件su - oracle <<EOFcp $ORACLE_HOME/network/admin/samples/* $ORACLE_HOME/network/admin/EOF