靜默安裝19C RAC的指令碼

raysuen發表於2020-12-08

指令碼為3個:

        1 為基礎設定指令碼。--PreRACConfiguatiion.sh

        2 為grid安裝指令碼。 --SilentInstallGrid19CRAC.sh

        3 為rdbms和instance安裝指令碼。 --SilentInstall19CRACRdbmsAndInstance.sh

注意:

        1 基礎設定指令碼可以重複執行

        2 grid和db安裝指令碼,在沒有執行安裝前停止都可以重複執行。

        3 指令碼只在rhel 7.6上測試,其他系統和版本不保證。


一 執行基礎設定指令碼前,要保證下面的問題完成:

        1 掛載ISO映象。

        2 把不存在ISO映象的RPM放到指令碼相同目錄,我習慣放/u01。

        3 設定好主機名。


二 執行grid安裝指令碼前:

        1 完成所有節點的/etc/hosts檔案內容補充。

        2 根據基礎設定指令碼的提示完成ssh配置。

        3 繫結磁碟陣列的LUN,或使用asmlib完成配置。

        4 19c的grid安裝包放入grid家目錄


三 執行rdbms和instance指令碼前:

        1 19c的db安裝包放入oracle家目錄

        2 建立asm磁碟組


指令碼下載地址:

        


PreRACConfiguatiion.sh:

#!/bin/bash
#by raysueen
#v1.0
#################################################################################
#執行指令碼前:
#    1. 把指令碼放入基礎目錄,例如:/u01
#   2. 掛載ISO
#    3. 把需要本地安裝的rpm上傳到基礎目錄
#    4. 設定好主機名
#執行指令碼後:
#    1. 手動繫結磁碟,或安裝asmlib並建立disk
#    2. 在hosts檔案內把VIP和scan的IP修改正確,並其他節點資訊新增進去
#    3. 透過提示把ssh互信完成。
#################################################################################
DefaultUserPWD="Cn00c36663"  #set a password for grid and oracle
####################################################################################
#install rpm that oracle is necessary for installing
####################################################################################
InstallRPM(){
    mountPatch=`mount | egrep "iso|ISO" | awk '{print $3}'`
    if [ ! ${mountPatch} ];then
        echo "The ISO file is not mounted on system."
        exit 99
    else
        [ -f /etc/yum.repos.d/local.repo ] && sed -i '/^#OraConfBegin/,/^#OraConfEnd/d' /etc/yum.repos.d/local.repo
        echo "#OraConfBegin" >> /etc/yum.repos.d/local.repo
        echo "[server]" >> /etc/yum.repos.d/local.repo
        echo "name=server" >> /etc/yum.repos.d/local.repo
        echo "baseurl=file://"${mountPatch} >> /etc/yum.repos.d/local.repo
        echo "enabled=1" >> /etc/yum.repos.d/local.repo
        echo "gpgcheck=1" >> /etc/yum.repos.d/local.repo
        rpm --import ${mountPatch}/RPM-GPG-KEY-redhat-release
    fi
    yum -y install unzip bc gcc gcc-c++  binutils  make gdb cmake  glibc ksh elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc-devel libaio libaio-devel libXrender libXrender-devel libX11 libXau sysstat libXi libXtst libgcc librdmacm-devel libstdc++ libstdc++-devel libxcb net-tools nfs-utils compat-libcap1 compat-libstdc++  smartmontools  targetcli python python-configshell python-rtslib python-six  unixODBC unixODBC-devel
    ls -l compat* elfutils* | awk -v rpmpackage="" '{rpmpackage=$NF" "rpmpackage}END{print "yum -y localinstall "rpmpackage}' | bash 
    while true
    do
        if [ `rpm -q bc gcc gcc-c++  binutils  make gdb cmake  glibc ksh elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc-devel libaio libaio-devel libXrender libXrender-devel libX11 libXau sysstat libXi libXtst libgcc librdmacm-devel libstdc++ libstdc++-devel libxcb net-tools nfs-utils compat-libcap1 smartmontools  targetcli python python-configshell python-rtslib python-six  unixODBC unixODBC-devel --qf '%{name}.%{arch}\n'| grep "not installed" | wc -l` -gt 0 ];then
            rpm -q bc gcc gcc-c++  binutils  make gdb cmake  glibc ksh elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc-devel libaio libaio-devel libXrender libXrender-devel libX11 libXau sysstat libXi libXtst libgcc librdmacm-devel libstdc++ libstdc++-devel libxcb net-tools nfs-utils compat-libcap1  smartmontools  targetcli python python-configshell python-rtslib python-six  unixODBC unixODBC-devel --qf '%{name}.%{arch}\n'| grep "not installed"
            read -p "`echo -e "Please confirm that all rpm package have installed.[${c_yellow}yes/no${c_end}] default yes:"`" ans
            if [ "${ans:-yes}" == "yes" ];then
                break
            else
                continue
            fi
        else
            break
        fi
    done
}
####################################################################################
# create user and groups 
####################################################################################
CreateUsersAndDirs(){
    ####################################################################################
    # create user and groups 
    ####################################################################################
    if [ `egrep "oinstall" /etc/group | wc -l` -eq 0 ];then
        groupadd -g 11001 oinstall  
    fi
    if [ `egrep "dba" /etc/group | wc -l` -eq 0 ];then
        groupadd -g 11002 dba  
    fi
    if [ `egrep "oper" /etc/group | wc -l` -eq 0 ];then
        groupadd -g 11003 oper  
    fi
    if [ `egrep "backupdba" /etc/group | wc -l` -eq 0 ];then
        groupadd -g 11004 backupdba  
    fi
    if [ `egrep "dgdba" /etc/group | wc -l` -eq 0 ];then
        groupadd -g 11005 dgdba  
    fi
    if [ `egrep "kmdba" /etc/group | wc -l` -eq 0 ];then
        groupadd -g 11006 kmdba  
    fi
    if [ `egrep "asmdba" /etc/group | wc -l` -eq 0 ];then
        groupadd -g 11007 asmdba  
    fi
    if [ `egrep "asmoper" /etc/group | wc -l` -eq 0 ];then
        groupadd -g 11008 asmoper  
    fi
    if [ `egrep "asmadmin" /etc/group | wc -l` -eq 0 ];then
        groupadd -g 11009 asmadmin  
    fi
    if [ `egrep "racdba" /etc/group | wc -l` -eq 0 ];then
        groupadd -g 11010 racdba  
    fi
    
    
    if [ `egrep "grid" /etc/passwd | wc -l` -eq 0 ];then
        useradd -u 11012 -g oinstall -G asmadmin,asmdba,asmoper,dba grid
        if [ $? -ne 0 ];then
            echo "Command failed to adding user --grid."
            exit  93
        fi
    else
        usermod -g oinstall -G asmadmin,asmdba,asmoper,dba grid
    fi
    if [ `egrep "oracle" /etc/passwd | wc -l` -eq 0 ];then
        useradd -u 11011 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle   
        if [ $? -ne 0 ];then
            echo "Command failed to adding user --oracle."
            exit  93
        fi
    else
        usermod -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle  
    fi
    echo "${DefaultUserPWD}" | passwd --stdin grid
    if [ $? -ne 0 ];then
        echo "Grid is not existing."
        exit  92
    fi
    echo "${DefaultUserPWD}" | passwd --stdin oracle
    if [ $? -ne 0 ];then
        echo "Oracle is not existing."
        exit  92
    fi
    
    ####################################################################################
    #make directory
    ####################################################################################
    [ ! -d /u01/app/19.0.0/grid ] && mkdir -p /u01/app/19.0.0/grid
    [ ! -d /u01/app/grid ] && mkdir -p /u01/app/grid
    [ ! -d /u01/app/oracle ] && mkdir -p /u01/app/oracle
    [ ! -d /u01/app/oracle/product/19.0.0/db_1 ] && mkdir -p /u01/app/oracle/product/19.0.0/db_1
    chown -R grid:oinstall /u01/app/grid
    chown -R grid:oinstall /u01/app/19.0.0
    chown -R oracle:oinstall /u01/app/oracle
    chmod -R 775 /u01/
    
}
 
####################################################################################
#Time dependent Settings
####################################################################################
TimeDepSet(){
    timedatectl set-timezone Asia/Shanghai
    systemctl stop ntpd.service
    systemctl disable ntpd.service
    [ -f /etc/ntp.conf ] && mv /etc/ntp.conf /etc/ntp.conf.orig
    systemctl stop chronyd.service
    systemctl disable chronyd.service
}
####################################################################################
#Time dependent Settings
####################################################################################
Stopavahi(){
    systemctl stop avahi-daemon.socket
    systemctl disable avahi-daemon.socket
    systemctl stop avahi-daemon.service
    systemctl disable avahi-daemon.service
    ps -ef|grep avahi-daemon | egrep -v "grep" | awk '{print "kill -9 "$2}'
}
####################################################################################
#stop firefall  and disable selinux
####################################################################################
StopFirewallAndDisableSelinux(){
    systemctl stop firewalld
    systemctl disable firewalld
    if [ "`/usr/sbin/getenforce`" != "Disabled" ];then
        /usr/sbin/setenforce 0
    fi
    if [ ! -z `grep "SELINUX=enforcing" /etc/selinux/config` ];then
        [ ! -f /etc/selinux/config.$(date +%F) ] && cp /etc/selinux/config /etc/selinux/config.$(date +%F)
        sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    fi
    
}
####################################################################################
#edit parameter
####################################################################################
EditParaFiles(){
    ####################################################################################
    #obtain current day
    ####################################################################################
    daytime=`date +%Y%m%d`
    ####################################################################################
    #ban hugepage
    ####################################################################################
    sed -i '/^#OraConfBegin/,/^#OraConfEnd/d' /etc/default/grub
    echo "#OraConfBegin" >> /etc/default/grub
    echo "transparent_hugepage=never" >> /etc/default/grub
    echo "#OraConfEnd" >> /etc/default/grub    
    ####################################################################################
    #edit limit
    ####################################################################################
    sed 's/*          soft    nproc     4096/* - nproc 16384/g' /etc/security/limits.d/20-nproc.conf
    ####################################################################################
    #edit limits.conf
    ####################################################################################
    sed -i '/^#OraConfBegin/,/^#OraConfEnd/d' /etc/security/limits.conf
    [ ! -f /etc/security/limits.conf.${daytime} ] && cp /etc/security/limits.conf /etc/security/limits.conf.${daytime}
    echo "#OraConfBegin" >> /etc/security/limits.conf
    echo "grid  soft  nproc 2047" >> /etc/security/limits.conf
    echo "grid  hard  nproc 16384" >> /etc/security/limits.conf
    echo "grid  soft  nofile 1024" >> /etc/security/limits.conf
    echo "grid  hard  nofile 65536" >> /etc/security/limits.conf
    echo "grid  soft  stack 10240" >> /etc/security/limits.conf
    echo "grid  hard  stack 32768" >> /etc/security/limits.conf
    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.conf
    echo "oracle soft stack  10240" >> /etc/security/limits.conf
    echo "oracle hard stack  32768" >> /etc/security/limits.conf
    echo "oracle hard memlock 4194304" >> /etc/security/limits.conf
    echo "oracle soft memlock 4194304" >> /etc/security/limits.conf
    echo "#OraConfEnd" >> /etc/security/limits.conf
    
    ####################################################################################
    #edit sysctl.conf
    ####################################################################################
    shmall=`/sbin/sysctl -a 2>&1 | grep "shmall" | awk '{print $NF}'`
    shmmax=`/sbin/sysctl -a 2>&1 | grep "shmmax" | awk '{print $NF}'`
    
    sed -i '/^#OraConfBegin/,/^#OraConfEnd/d' /etc/sysctl.conf #delete content
    [ ! -f /etc/sysctl.conf.${daytime} ] && cp /etc/sysctl.conf /etc/sysctl.conf.${daytime}
    echo "#OraConfBegin" >> /etc/sysctl.conf
    echo "fs.aio-max-nr = 1048576" >> /etc/sysctl.conf
    echo "fs.file-max = 6815744" >> /etc/sysctl.conf
    echo "kernel.shmall = "${shmall} >> /etc/sysctl.conf
    echo "kernel.shmmax = "${shmall} >> /etc/sysctl.conf
    echo "kernel.shmmni = 4096" >> /etc/sysctl.conf
    echo "kernel.sem = 250 32000 100 128" >> /etc/sysctl.conf
    echo "net.ipv4.ip_local_port_range = 9000 65500" >> /etc/sysctl.conf
    echo "net.core.rmem_default = 262144" >> /etc/sysctl.conf
    echo "net.core.rmem_max = 4194304" >> /etc/sysctl.conf
    echo "net.core.wmem_default = 262144" >> /etc/sysctl.conf
    echo "net.core.wmem_max = 1048576" >> /etc/sysctl.conf
    echo "#OraConfEnd" >> /etc/sysctl.conf
    
    sysctl -p
    
    ####################################################################################
    #edit nsysctl.conf    
    ####################################################################################
    
    sed -i '/^#OraConfBegin/,/^#OraConfEnd/d' /etc/sysconfig/network #delete content
    [ ! -f /etc/sysconfig/network.${daytime} ] && cp /etc/sysconfig/network /etc/sysconfig/network.${daytime}
    echo "#OraConfBegin" >> /etc/sysconfig/network
    echo "NOZEROCONF=yes" >> /etc/sysconfig/network
    echo "#OraConfEnd" >> /etc/sysconfig/network
}
####################################################################################
#obtain base dir
####################################################################################
ObtainBasedir(){
    if [ "${basedir:-None}" == "None" ];then
        while true
        do
            read -p "`echo -e "please enter the name of base dir,put this shell and software in the dir.default [\e[1;33m/u01\e[0m]: "`" bdir
            basedir=${bdir:-/u01}  #this is base dir,put this shell and software in the dir
            if [ ! -d ${basedir} ];then
                echo -e "the ${basedir} is not exsist,please ${c_red}make it up${c_end}"
                continue
            else
                break
              fi
        done
    else
        if [ ! -d ${basedir} ];then
            echo -e "the ${basedir} is not exsist,please ${c_red}make it up${c_end}"
            exit 95
        fi
    fi 
}
####################################################################################
#edit bash_profile
####################################################################################
EditUserBashprofile(){
    ####################################################################################
    #obtain current day
    ####################################################################################
    daytime=`date +%Y%m%d`
    ####################################################################################
    #obtain path
    ####################################################################################
    gridbase="${basedir}/app/grid"
    gridhome="${basedir}/app/19.0.0/grid"
    orabase="${basedir}/app/oracle"    #set path of oracle_base
    orahome="${orabase}/product/19.0.0/db_1"
    ####################################################################################
    #edit grid's bash
    ####################################################################################
    while true
    do
        read -p "`echo -e "\e[1;33mPlease enter a number to indicate the current node。: \e[0m"`" NodeNum
        [ `grep '^[[:digit:]]*$' <<< "${NodeNum}"` ] && break || echo -e "\e[1;33You must enter a number!!.\e[0m";continue
        
    done
    [ ! -f /home/grid/.bash_profile${daytime}.bak ] && su - grid -c "cp /home/grid/.bash_profile /home/grid/.bash_profile${daytime}.bak"
    [ -f /home/grid/.bash_profile ] && su - grid -c "sed -i '/^#OraConfBegin/,/^#OraConfEnd/d' /home/grid/.bash_profile"
    su - grid -c "echo \"#OraConfBegin\" >> /home/grid/.bash_profile"
    su - grid -c "echo 'ORACLE_BASE='${gridbase} >> /home/grid/.bash_profile"
    su - grid -c "echo 'ORACLE_HOME='${gridhome} >> /home/grid/.bash_profile"
    su - grid -c "echo 'ORACLE_SID=+ASM'${NodeNum} >> /home/grid/.bash_profile"
    su - grid -c "echo 'export ORACLE_BASE ORACLE_HOME ORACLE_SID' >> /home/grid/.bash_profile"
    su - grid -c "echo 'export PATH=\$PATH:\$HOME/bin:\$ORACLE_HOME/bin' >> /home/grid/.bash_profile"
    #su - grid -c "echo 'export NLS_LANG=AMERICAN_AMERICA.AL32UTF8' >> /home/grid/.bash_profile"           #AL32UTF8,ZHS16GBK
    su - grid -c "echo 'export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$ORACLE_HOME/lib' >> /home/grid/.bash_profile"
    su - grid -c "echo \"#OraConfEnd\" >> /home/grid/.bash_profile"
    ####################################################################################
    #edit oracle's bash
    ####################################################################################
    [ ! -f /home/oracle/.bash_profile${daytime}.bak ] && su - oracle -c "cp /home/oracle/.bash_profile /home/oracle/.bash_profile${daytime}.bak"
    [ -f home/oracle/.bash_profile ] && su - oracle -c "sed -i '/^#OraConfBegin/,/^#OraConfEnd/d' /home/oracle/.bash_profile"
    su - oracle -c "echo \"#OraConfBegin\" >> /home/oracle/.bash_profile"
    su - oracle -c "echo 'ORACLE_BASE='${orabase} >> /home/oracle/.bash_profile"
    su - oracle -c "echo 'ORACLE_HOME='${orahome} >> /home/oracle/.bash_profile"
    su - oracle -c "echo 'ORACLE_SID=' >> /home/oracle/.bash_profile"
    su - oracle -c "echo 'export ORACLE_BASE ORACLE_HOME ORACLE_SID' >> /home/oracle/.bash_profile"
    su - oracle -c "echo 'export PATH=\$PATH:\$HOME/bin:\$ORACLE_HOME/bin' >> /home/oracle/.bash_profile"
    #su - oracle -c "echo 'export NLS_LANG=AMERICAN_AMERICA.AL32UTF8' >> /home/oracle/.bash_profile"           #AL32UTF8,ZHS16GBK
    su - oracle -c "echo 'export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$ORACLE_HOME/lib' >> /home/oracle/.bash_profile"
    su - oracle -c "echo \"#OraConfEnd\" >> /home/oracle/.bash_profile"
    
    
}
####################################################################################
#create keygen
####################################################################################
EditHostsFile(){
    ####################################################################################
    #list internet name
    ####################################################################################
    echo "internet name:"
    for i in `ip addr | egrep "^[0-9]" | awk -F ':' '{print $2}'`
    do
        IPtemp=`ifconfig $i | egrep -v "inet6" | awk -F 'net|netmaskt' '{print $2}' | sed ':label;N;s/\n//;b label' | sed -e 's/ //g' -e 's/)//g'`
        printf "%10s : %-20s\n" $i ${IPtemp}
        #echo -e "      \e[1;33m"$i": "`ifconfig $i | egrep -v "inet6" | awk -F 'net|netmaskt' '{print $2}' | sed ':label;N;s/\n//;b label' | sed -e 's/ //g' -e 's/)//g'`"\e[0m"
    done
    ####################################################################################
    #get public internet
    ####################################################################################
    while true
    do
        read -p "`echo -e "\e[1;33mPlease enter internet name for public :  \e[0m"`" PublicName
        [ `ip addr | egrep "^[0-9]" | awk -F ':' '{print $2}' | egrep "${PublicName}"` ] && break || echo "Please enter a right internet name!!";continue
        
    done
    ####################################################################################
    #get private internet
    ####################################################################################
    while true
    do
        read -p "`echo -e "\e[1;33mPlease enter internet name for private :  \e[0m"`" PrivateName
        [ `ip addr | egrep "^[0-9]" | awk -F ':' '{print $2}' | egrep "${PrivateName}"` ] && break || echo "Please enter a right internet name!!";continue
        
    done
    HName=`/bin/hostname`
    #ip add | grep ens192 | grep inet | awk '{print $2}' | awk -F"/" '{printf "%-20s'${HName}'\n",$1}'
    sed -i '/^#OraConfBegin/,/^#OraConfEnd/d' /etc/hosts
    echo "" >> /etc/hosts
    echo "#OraConfBegin" >> /etc/hosts
    echo "#public ip" >> /etc/hosts
    ip add | grep ${PublicName} | grep inet | awk '{print $2}' | awk -F"/" '{printf "%-20s'${HName}'\n",$1}' >> /etc/hosts
    echo "" >> /etc/hosts
    echo "" >> /etc/hosts
    echo "#private ip" >> /etc/hosts
    ip add | grep ${PrivateName} | grep inet | awk '{print $2}' | awk -F"/" '{printf "%-20s'${HName}'-priv\n",$1}' >> /etc/hosts
    echo "" >> /etc/hosts
    echo "" >> /etc/hosts
    echo "#Vip" >> /etc/hosts
    ip add | grep ${PublicName} | grep inet | awk '{print $2}' | awk -F"[./]" '{printf "%-20s'${HName}'-vip\n",$1"."$2"."$3"."}' >> /etc/hosts
    echo "" >> /etc/hosts
    echo "" >> /etc/hosts
    echo "#scan ip" >> /etc/hosts
    ip add | grep ${PublicName} | grep inet | awk '{print $2}' | awk -F"[./]" '{printf "%-20sracscan\n",$1"."$2"."$3"."}' >> /etc/hosts
    echo "" >> /etc/hosts
    echo "#OraConfEnd" >> /etc/hosts
}
####################################################################################
#create keygen
####################################################################################
CreateKeygen(){
    su - grid -c "rm -rf ~/.ssh"
    su - grid -c "echo -e \"\\n\\n\\n\\n\" | ssh-keygen -t rsa"
    su - grid -c "echo -e \"\\n\\n\\n\\n\" | ssh-keygen -t dsa"
    su - grid -c "cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys"
    su - grid -c "cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys"
    su - oracle -c "rm -rf ~/.ssh"
    su - oracle -c "echo -e \"\\n\\n\\n\\n\" | ssh-keygen -t rsa"
    su - oracle -c "echo -e \"\\n\\n\\n\\n\" | ssh-keygen -t dsa"
    su - oracle -c "cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys"
    su - oracle -c "cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys"
    echo -e "\e[1;33mIf this is first node in RAC,you can exec following command as grid and oracle,not ignore following.\e[0m"
    echo -e "\e[1;33m    ssh OtherNode cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys\e[0m"
    echo -e "\e[1;33m    ssh OtherNode cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys\e[0m" 
    echo -e "\e[1;33m    scp ~/.ssh/authorized_keys OtherNode:~/.ssh/authorized_keys\e[0m" 
    
}
####################################################################################
#run function
####################################################################################
RunFunction(){
    InstallRPM   
    CreateUsersAndDirs   
    TimeDepSet
    Stopavahi
    StopFirewallAndDisableSelinux   
    EditParaFiles   
    ObtainBasedir   
    EditUserBashprofile      
    EditHostsFile
    CreateKeygen
}
####################################################################################
#entrance of the script
####################################################################################
RunFunction


SilentInstallGrid19CRAC.sh:

#!/bin/bash
#by raysuen
#v01
#################################################################################
#執行指令碼前:
#    1. 確認是否繫結磁碟,或使用asmlib建立磁碟。
#   2. 在/etc/hosts檔案內的IP資訊是否準確。
#    3. 確認ssh互信完成。
#    
#
#################################################################################
. ~/.bash_profile
####################################################################################
#unzip Grid
####################################################################################
UnzipPRMAndCheck(){
    echo "${ORACLE_HOME}" | awk -F"/" '{if($NF=="") {print "rm -rf "$0"*"} else {print "rm -rf "$0"/*"}}' | bash
    if [ -f ~/LINUX.X64_193000_grid_home.zip ];then
        unzip ~/LINUX.X64_193000_grid_home.zip -d ${ORACLE_HOME}
        [ $? -ne 0 ] && exit 98
        echo -e "\e[1;33mExecute the following command as root on current node: \e[0m"
        if [ -d ${ORACLE_HOME}/cv/rpm ];then
            CvRpmName=`ls ${ORACLE_HOME}/cv/rpm`
             echo ${CvRpmName} | awk '{print "    rpm -ivh '${ORACLE_HOME}'/cv/rpm/"$0}'
        fi
        HostnameArray=$(sed -n '/^#public ip/,/^#private ip/p' /etc/hosts | egrep "^[[:digit:]]" | awk '{if($2!=cmd) print $2}' cmd=`hostname`)
        for var in ${HostnameArray[@]}
        do
            scp ${ORACLE_HOME}/cv/rpm/${CvRpmName} $var:/tmp
        done
        echo -e "\e[1;33mExecute the following command as root on remode node: \e[0m"
        echo -e "\e[1;33m    rpm -ivh /tmp/${CvRpmName}\e[0m"
        while true
        do
            read -p "`echo -e "Have you finished installing the cv rpm,yes/no.default \e[1;33myes\e[0m: "`" RpmConfirm
            if [ "${RpmConfirm:=yes}" == "yes" ];then
                break
            elif [ "${RpmConfirm:=yes}" == "no" ];then
                continue
            else
                echo "You only enter value yes or no."
                continue
            fi 
            
        done
        while true
        do
            echo -e "\n\n\n\n" | ${ORACLE_HOME}/runcluvfy.sh stage -pre crsinst -n `sed -n '/^#public ip/,/^#private ip/p' /etc/hosts | egrep "^[[:digit:]]" | awk '{printf $2","}' | awk '{print substr($0,1,length($0)-1)}'`  -fixup -verbose > ~/gridcheck.txt
            echo -e "\e[1;33mPlease check the ~/gridcheck.txt to sure that everything is ok before installing grid.\e[0m: "
            read -p "`echo -e "\e[1;33mHave you checked the file and then go on installing grid,yes/no.\e[0m: "`" CheckFileConfirm
            if [ ${CheckFileConfirm:-null} == "null" ];then
                echo "You only enter the value, yes or no."
                continue
            elif [ ${CheckFileConfirm:-null} == "yes" ];then
                break
            elif [ ${CheckFileConfirm:-null} == "no" ];then
                continue
            else
                echo "You only enter the value, yes or no."
                continue
            fi
        done
        
        
    else
        echo "The Grid zip not find in grid home."
        exit 99
    fi
    
    
}
####################################################################################
#create grid rsp file
####################################################################################
CreateGirdRspFile(){
    ####################################################################################
    #get scanname
    ####################################################################################
    if [ ! ${scanname} ];then
        while true
        do
            read -p "`echo -e "please enter the name for scanName.default \e[1;33mracscan\e[0m: "`" scanname   #get scanname
            echo -e "Your scanNmae is \e[1;33m" ${scanname:=racscan}"\e[0m."
            read -p "`echo -e "please confirm the scanNmae -\e[1;33m${scanname}\e[0m-, yes/no,default \e[1;33myes\e[0m: "`" scanConfirm  #confirm scanmae
            if [ ${scanConfirm:=yes} == "yes" ];then
                break
            elif [ ${scanConfirm:=yes} == "no" ];then
                continue
            else
                echo "Please enter yes or no."
                continue
            fi
        done
    fi
    ####################################################################################
    #get cluster name
    ####################################################################################
    if [ ! ${clustername} ];then
        while true
        do
            read -p "`echo -e "please enter the name for clusterName.default \e[1;33mserver-cluster\e[0m: "`" clustername       #get cluster name
            echo -e "Your scanNmae is \e[1;33m" ${clustername:=server-cluster}"\e[0m."
            read -p "`echo -e "please confirm the clusterName  \e[1;33m${clustername}\e[0m , yes/no,default \e[1;33myes\e[0m: "`" clusterConfirm  #onfirm cluster name
            if [ ${clusterConfirm:=yes} == "yes" ];then
                break
            elif [ ${clusterConfirm:=yes} == "no" ];then
                continue
            else
                echo "Please enter yes or no."
                continue
            fi
        done
    fi
    ####################################################################################
    #get hostname and hostname-vip
    ####################################################################################
    if [ ! ${hostnames} ];then
        exhostnames="`hostname`:`hostname`-vip"
        while true
        do
            echo "please enter the whole nodes's hostname.And you use commas to separated the multiple groups of names。"
            read -p "`echo -e "Example: \e[1;33 ${exhostnames} \e[0m: "`" hostnames
            if [ ${hostnames} ];then
                echo -e "Your hostnames are \e[1;33m " ${hostnames} " \e[0m."
            else
                echo "\e[1;33The hostnames can be empty!!\e[0m"
                continue
            fi
            read -p "`echo -e "please confirm the hostnames \e[1;33m${hostnames}\e[0m , yes/no,default \e[1;33myes\e[0m: "`" hostConfirm
            if [ ${hostConfirm:=yes} == "yes" ];then
                break
            elif [ ${hostConfirm:=yes} == "no" ];then
                continue
            else
                echo "Please enter yes or no."
                continue
            fi
        done
    fi
    ####################################################################################
    #get IP Management style
    ####################################################################################
    while true
    do
        echo ""
        echo "Enter a number for the specified interface to bind to how the network card is managed."
        echo "InterfaceType stand for the following values"
        echo -e "\e[1;33m   - 1 : PUBLIC\e[0m"
        echo -e "\e[1;33m   - 2 : PRIVATE\e[0m"
        echo -e "\e[1;33m   - 3 : DO NOT USE\e[0m"
        echo -e "\e[1;33m   - 4 : ASM\e[0m"
        echo -e "\e[1;33m   - 5 : ASM & PRIVATE\e[0m"
        unset NetworkMS #clear variable NetworkMS
        for i in `ip addr | egrep "^[2-9]" | awk -F ':' '{print $2}'`  #circuate the interface name
        do
            IPTemp=`/usr/sbin/ifconfig $i | egrep "broadcast|netmaskt" | awk '{print $2}' | sed ':label;N;s/\n//;b label' | sed -e 's/ //g' -e 's/)//g'`   #get IP of the interface 
            BroadTemp=`/usr/sbin/ifconfig $i | egrep "broadcast|netmaskt" | awk '{print $4}' | sed ':label;N;s/\n//;b label' | sed -e 's/ //g' -e 's/)//g'`  ##get broadcast of the interface 
            [ ${BroadTemp} ] || break   #if the broadcast is null then break 
            NetworkTemp=$(ipcalc -n  ${IPTemp} ${BroadTemp} | awk -F"=" '{print $2}')  #get network order ot ip and broadcast
            #get interface:network:networkManagement
            while true
            do
                
                NetworkMSTemp=""
                printf "%10s : %-20s: " $i ${NetworkTemp}  #show the interface:network
                read -p "" NetworkMSTemp  #get networkManagement
                #Determine if the input is a number
                if [[ `grep '^[[:digit:]]*$' <<< "${NetworkMSTemp}"` ]] && [[ ${NetworkMSTemp} -le 5 ]];then
                    break 
                else
                    echo "You must enter a number and the number less than 5!" 
                    continue
                fi
            done
            #get the whole interface:network:networkManagement
            [ ${NetworkMS} ] && NetworkMS=`echo ${NetworkMS}","$i":"${NetworkTemp}":"${NetworkMSTemp}` || NetworkMS=`echo $i":"${NetworkTemp}":"${NetworkMSTemp}`
        done
        echo ""
        echo "Your interface management list:"
        NetworkMSArray=(${NetworkMS//,/ })
        for var in ${NetworkMSArray[@]}
        do
               echo ${var} | awk -F":" '{if($3==1) {printf "    "$1":"$2":PUBLIC\n"} else if($3==2){printf "    "$1":"$2":PRIVATE\n"}else if($3==3){printf "    "$1":"$2":DO NOT USE\n"}else if($3==4){printf "    "$1":"$2":ASM\n"}else if($3==5){printf "    "$1":"$2":ASM & PRIVATE\n"}}'
           done
           #confirm the interfaces management
           while true
           do
               read -p "`echo -e "please confirm the interface management, yes/no,default \e[1;33myes\e[0m: "`" interfaceConfirm
               if [ ${interfaceConfirm:=yes} == "yes" ];then
                   break
                   
               elif [ ${interfaceConfirm:=yes} == "no" ];then
                   break
               else
                   echo "You must yes or no."
                   continue
               fi
           done
           [ ${interfaceConfirm} == "yes" ] && break || continue
 
    done
    
    
    ####################################################################################
    #get diskgroup name,redundancy,path
    ####################################################################################
    
    #disk discovery path
    while true
    do
        echo ""
        echo "Default disks discovery path is /dev/sd*.Do you wang to change?"
        read -p "`echo -e "yes/no,Default \e[1;33mno\e[0m: "`" DefDiskPathConfirm
        if [ "${DefDiskPathConfirm:=no}" == "yes" ];then
            read -p "`echo -e "Please enter the new disks path : "`" DiskPath
            if [ `ls -lh ${DiskPath:=""} 2>/dev/null  | awk '/grid asmadmin/{print $0}' | wc -l ` -ge 1 ];then
                echo ""
                echo -e "\e[1;33mAvaliable disk list:\e[0m"
                ls -lh ${DiskPath:=""} 2>/dev/null  | awk '/grid asmadmin/{print "    "$NF}'
                #ls -lh ${DiskPath:=""} 2>/dev/null  | awk '/grid asmadmin/{print '${DiskPath}'$0}'
                break 
            #else
            #    echo "You must enter a exists path!"
            #    continue
            fi
            
        elif [ "${DefDiskPathConfirm:=no}" == "no" ];then
            DiskPath='/dev/sd*'
            echo ""
            echo -e "\e[1;33mAvaliable disk list:\e[0m"
            ls -lh ${DiskPath:='/dev/sd*'} 2>/dev/null  | awk '/grid asmadmin/{print "    "$NF}'
            break
        
        else
            echo "You only enter yes or no,please enter right value."
            continue
        fi
    done
    
    #diskgroup name
    while true
    do
        echo ""
        echo -e "\e[1;33mOCR and Voting disk data will be stored in the following ASM Disk group.\e[0m"
        read -p "`echo -e "Disk group name.Default\e[1;33m OCR01 \e[0m: "`" ASMdgn
        read -p "`echo -e "Disk group redundancy,EXTERNAL/NORMAL/HIGH.Default \e[1;33m EXTERNAL \e[0m: "`" ASMRedundancy
        read -p "`echo -e "Enter disks for disk group.Multiple paths are separated by commas.: "`" ASMdisks
        if [ ! ${ASMdisks} ];then
            echo "The disks can not be empty!!"
            continue
        fi
        if [[ ${ASMRedundancy:="EXTERNAL"} == "NORMAL" ]] || [[ ${ASMRedundancy:="EXTERNAL"} == "HIGH" ]];then
            ASMDiskArray=(${ASMdisks//,/ })
            for var in ${ASMDiskArray[@]}
            do
                while true
                do
                    read -p "`echo -e "Enter Failuregroup for ${var}: "`" ASMFGTmp
                    if [ ${ASMFGTmp} ];then
                        #ASMFGs=${ASMFGs}${ASMFGTmp}","
                        #ASMFGsWithDisks=${ASMFGsWithDisks}","${var}","${ASMFGTmp}
                        if [ ! ${ASMFGs} ];then
                            ASMFGs=${ASMFGTmp}","
                            ASMFGsWithDisks=${var}","${ASMFGTmp}
                        else
                            ASMFGs=${ASMFGs}${ASMFGTmp}","
                            ASMFGsWithDisks=${ASMFGsWithDisks}","${var}","${ASMFGTmp}
                        fi
                        break
                    else
                        echo "The ASM failuregroup can be empty!"
                        continue
                    fi
                    unset ASMFGTmp
                done
                
            
            done
        else
            ASMFGsWithDisks=`echo ${ASMdisks} | awk -F',' '{for(i=1;i<=NF;i++){if(i!=NF){printf $i",,"}else{print $i","}}}'`
        fi
        echo ""
        echo -e "\e[1;33mDisk group name is \e[1;33m${ASMdgn:=OCR01}.\e[0m"
        echo -e "\e[1;33mDisk group redundancy is \e[1;33m${ASMRedundancy}.\e[0m"
        echo -e "\e[1;33mThe disks of diskgroup are \e[1;33m${ASMdisks}.\e[0m"
        if [ ${ASMFGs} ];then
            echo -e "\e[1;33mThe disks with failuregroup are :\e[0m"
            echo ${ASMFGsWithDisks} | awk -F',' '{for(i=1;i<=NF;i++){{if(i%2==0) {printf $i"\n"} else {printf "    "$i":"}}}}'
        fi
        
        while true
        do
            read -p "`echo -e "Do you want to change the diskgroup infomations,yes/no.default \e[1;33mno\e[0m: "`" ASMConfirm
            if [ "${ASMConfirm:=no}" == "yes" ];then
                break
            elif [ "${ASMConfirm:=no}" == "no" ];then
                break
            else
                echo "You must enter yes or no."
                continue
            fi
        done
        [ "${ASMConfirm:=no}" == "yes" ] && continue || break
    done
    
    
}
####################################################################################
#install grid function
####################################################################################
InstallGrid(){
    #${ORACLE_HOME}/gridSetup.sh -silent -ignorePrereqFailure -responseFile ~/grid.rsp -waitForCompletion
    if [ ${ASMFGs} ];then
        GridInstallString="INVENTORY_LOCATION=/u01/app/grid/oraInventory
         SELECTED_LANGUAGES=en,en_GB 
 oracle.install.option=CRS_CONFIG 
 ORACLE_BASE=/u01/app/grid 
 oracle.install.asm.OSDBA=asmdba 
 oracle.install.asm.OSASM=asmadmin 
 oracle.install.asm.OSOPER=asmoper  
 oracle.install.crs.config.scanType=LOCAL_SCAN 
 oracle.install.crs.config.gpnp.scanName=${scanname} 
 oracle.install.crs.config.gpnp.scanPort=1521 
 oracle.install.crs.config.ClusterConfiguration=STANDALONE 
 oracle.install.crs.config.configureAsExtendedCluster=false 
 oracle.install.crs.config.clusterName=${clustername} 
 oracle.install.crs.config.gpnp.configureGNS=false 
 oracle.install.crs.config.autoConfigureClusterNodeVIP=false 
 oracle.install.crs.config.clusterNodes=${hostnames} 
 oracle.install.crs.config.networkInterfaceList=${NetworkMS} 
 oracle.install.asm.configureGIMRDataDG=false 
 oracle.install.crs.config.useIPMI=false 
 oracle.install.asm.storageOption=FLEX_ASM_STORAGE 
 oracle.install.asmOnNAS.configureGIMRDataDG=false 
 oracle.install.asm.SYSASMPassword=oracle 
 oracle.install.asm.diskGroup.name=${ASMdgn} 
 oracle.install.asm.diskGroup.redundancy=${ASMRedundancy} 
 oracle.install.asm.diskGroup.AUSize=4 
 oracle.install.asm.diskGroup.FailureGroups=${ASMFGs} 
 oracle.install.asm.diskGroup.disksWithFailureGroupNames=${ASMFGsWithDisks}  
 oracle.install.asm.diskGroup.disks=${ASMdisks} 
 oracle.install.asm.diskGroup.diskDiscoveryString=${DiskPath}
 oracle.install.asm.configureAFD=false 
 oracle.install.asm.monitorPassword=oracle 
 oracle.install.crs.configureRHPS=false 
 oracle.install.crs.config.ignoreDownNodes=false 
 oracle.install.config.managementOption=NONE 
 oracle.install.config.omsPort=0 
 oracle.install.crs.rootconfig.executeRootScript=false"
    else
        GridInstallString="INVENTORY_LOCATION=/u01/app/grid/oraInventory 
 SELECTED_LANGUAGES=en,en_GB 
 oracle.install.option=CRS_CONFIG 
 ORACLE_BASE=/u01/app/grid 
 oracle.install.asm.OSDBA=asmdba 
 oracle.install.asm.OSASM=asmadmin 
 oracle.install.asm.OSOPER=asmoper  
 oracle.install.crs.config.scanType=LOCAL_SCAN 
 oracle.install.crs.config.gpnp.scanName=${scanname} 
 oracle.install.crs.config.gpnp.scanPort=1521 
 oracle.install.crs.config.ClusterConfiguration=STANDALONE 
 oracle.install.crs.config.configureAsExtendedCluster=false 
 oracle.install.crs.config.clusterName=${clustername} 
 oracle.install.crs.config.gpnp.configureGNS=false 
 oracle.install.crs.config.autoConfigureClusterNodeVIP=false 
 oracle.install.crs.config.clusterNodes=${hostnames} 
 oracle.install.crs.config.networkInterfaceList=${NetworkMS} 
 oracle.install.asm.configureGIMRDataDG=false 
 oracle.install.crs.config.useIPMI=false 
 oracle.install.asm.storageOption=FLEX_ASM_STORAGE 
 oracle.install.asmOnNAS.configureGIMRDataDG=false 
 oracle.install.asm.SYSASMPassword=oracle 
 oracle.install.asm.diskGroup.name=${ASMdgn} 
 oracle.install.asm.diskGroup.redundancy=${ASMRedundancy} 
 oracle.install.asm.diskGroup.AUSize=4 
 oracle.install.asm.diskGroup.disksWithFailureGroupNames=${ASMFGsWithDisks}  
 oracle.install.asm.diskGroup.disks=${ASMdisks} 
 oracle.install.asm.diskGroup.diskDiscoveryString=${DiskPath}
 oracle.install.asm.configureAFD=false 
 oracle.install.asm.monitorPassword=oracle 
 oracle.install.crs.configureRHPS=false 
 oracle.install.crs.config.ignoreDownNodes=false 
 oracle.install.config.managementOption=NONE 
 oracle.install.config.omsPort=0 
 oracle.install.crs.rootconfig.executeRootScript=false"
    fi
    #echo ${GridInstallString}
    
    ####################################################################################
    #install grid 
    ####################################################################################
    #echo "${ORACLE_HOME}/gridSetup.sh -ignorePrereq -waitforcompletion -silent -responseFile ${ORACLE_HOME}/install/response/gridsetup.rsp ${GridInstallString}"
    ${ORACLE_HOME}/gridSetup.sh -ignorePrereq -waitforcompletion -silent -responseFile ${ORACLE_HOME}/install/response/gridsetup.rsp ${GridInstallString}
    
    echo -e "\e[1;31mAttention: You need not to execute configuration script.\e[0m"
    while true
    do
        read -p "`echo -e "Have you finished executing the script?yes/no: "`" ExecScriptCon
        if [ "${ExecScriptCon}" == "yes" ];then
            ${ORACLE_HOME}/gridSetup.sh -silent -executeConfigTools  -waitforcompletion -responseFile ${ORACLE_HOME}/install/response/gridsetup.rsp ${GridInstallString}
            break
        elif [ "${ExecScriptCon}" == "no" ];then
            continue
        else
            echo "You must enter yes or no!"
            continue
        fi
    done
    
    
}
####################################################################################
#entrance of script
####################################################################################
CreateGirdRspFile
UnzipPRMAndCheck
InstallGrid


SilentInstall19CRACRdbmsAndInstance.sh:

#!/bin/bash
#by raysuen
#v01
#################################################################################
#執行指令碼前:
#    1. 建立例項前確認儲存資料的磁碟組存在
#    2. 安裝包放在oracle家目錄內
#
#################################################################################
. ~/.bash_profile
####################################################################################
#unzip oracle rdbms software and install rdbms
####################################################################################
UnzipAndInstallRdbms(){
    echo "${ORACLE_HOME}" | awk -F"/" '{if($NF=="") {print "rm -rf "$0"*"} else {print "rm -rf "$0"/*"}}' | bash
    if [ -f ~/LINUX.X64_193000_db_home.zip ];then
        unzip ~/LINUX.X64_193000_db_home.zip -d ${ORACLE_HOME}
        [ $? -ne 0 ] && exit 98
    else
        echo "The DB zip not find in oracle home."
        exit 99
    fi
    NodeList=`sed -n '/^#public ip/,/^#private ip/p' /etc/hosts | egrep "^[[:digit:]]" | awk '{printf $2","}' | awk '{print substr($0,1,length($0)-1)}'`
    ${ORACLE_HOME}/runInstaller -ignorePrereq -waitforcompletion -silent \
           -responseFile ${ORACLE_HOME}/install/response/db_install.rsp \
           oracle.install.option=INSTALL_DB_SWONLY \
           UNIX_GROUP_NAME=oinstall \
           INVENTORY_LOCATION=${ORACLE_BASE}/oraInventory \
           SELECTED_LANGUAGES=en,en_GB \
           ORACLE_HOME=${ORACLE_HOME} \
           ORACLE_BASE=${ORACLE_BASE} \
           oracle.install.db.InstallEdition=EE \
        oracle.install.db.OSDBA_GROUP=dba \
        oracle.install.db.OSOPER_GROUP=oper \
        oracle.install.db.OSBACKUPDBA_GROUP=backupdba \
        oracle.install.db.OSDGDBA_GROUP=dgdba \
        oracle.install.db.OSKMDBA_GROUP=kmdba \
        oracle.install.db.OSRACDBA_GROUP=racdba \
        oracle.install.db.rootconfig.executeRootScript=false \
        oracle.install.db.CLUSTER_NODES=${NodeList} \
        oracle.install.db.ConfigureAsContainerDB=false \
        oracle.install.db.config.starterdb.memoryOption=false \
        oracle.install.db.config.starterdb.installExampleSchemas=false \
        oracle.install.db.config.starterdb.managementOption=DEFAULT \
        oracle.install.db.config.starterdb.omsPort=0 \
        oracle.install.db.config.starterdb.enableRecovery=false
        
}
####################################################################################
#install instance
####################################################################################
InstallInstance(){
    #NodeList=`sed -n '/^#public ip/,/^#private ip/p' /etc/hosts | egrep "^[[:digit:]]" | awk '{printf $2","}' | awk '{print substr($0,1,length($0)-1)}'`
    
    while true
    do
        read -p "`echo -e "Do you go on to install instance,\e[1;33m yes/no \e[0m : "`" InstanceConfirm
        if [ "${InstanceConfirm}" == "yes" ];then
            break
        elif [ "${InstanceConfirm}" == "no" ];then
            exit 0
        else
            echo "You only enter yes or no."
            continue
        fi
    done
    
    while true
    do
        ####################################################################################
        #get SID prefix
        ####################################################################################
        read -p "`echo -e "please enter the sid and db name prefix.default \e[1;33m orcl \e[0m: "`" osid
        [ ${osid} ] || osid="orcl"
        
        ####################################################################################
        #get characterSet
        ####################################################################################
        while true
        do
            echo "please enter the characterSet for your instance."
            echo "(1) ZHS16GBK"
            echo "(2) AL32UTF8"
            read -p "`echo -e ".Please enter 1 or 2 to choose character: "`" Inchar
            if [ ! ${Inchar} ];then
                echo "You must enter 1 or 2 to choose the character."
                continue
            elif [ ${Inchar} -eq 1 ];then
                InCharacter=ZHS16GBK  #this is character of instance. 
                break
            elif [ ${Inchar} -eq 2 ];then
                InCharacter=AL32UTF8  #this is character of instance. 
                break
            else
                echo "You must enter 1 or 2 to choose the character."
                continue
            fi
        done
        
        ####################################################################################
        #get diskgroup for datafile location
        ####################################################################################
        while true
        do
            read -p "`echo -e ".Please specify a diskgroup for datafile location: "`" DiskGroupName
            [ ${DiskGroupName} ]&& break || continue
        done    
        
        ####################################################################################
        #get SGA PGA  
        ####################################################################################
        while true
        do
            read -p "`echo -e ".Please specify SGA size,default MB,you also use G. : "`" SGASize
            if [ ! ${SGASize} ];then
                echo "You must specify a value for sga."
                continue
            fi
            if [ ! `echo ${SGASize} | sed 's/[[:digit:]]//g'` ];then
                SGASize=${SGASize}"MB"
                break
            elif [ `echo ${SGASize} | sed 's/[[:digit:]]//g'` == "G" ];then
                break
            elif [ `echo ${SGASize} | sed 's/[[:digit:]]//g'` == "M" ];then
                break
            else
                echo "You must specify right a value for sga."
                echo "Example: 4096 or 4096M or 4G"
                echo ""
                continue
            fi
        done
        while true
        do
            read -p "`echo -e "Please specify PGA size,default MB,you also use G. : "`" PGASize
            if [ ! ${PGASize} ];then
                echo "You must specify a value for pga."
                continue
            fi
            if [ ! `echo ${PGASize} | sed 's/[[:digit:]]//g'` ];then
                PGASize=${PGASize}"MB"
                break
            elif [ `echo ${PGASize} | sed 's/[[:digit:]]//g'` == "G" ];then
                break
            elif [ `echo ${PGASize} | sed 's/[[:digit:]]//g'` == "M" ];then
                break
            else
                echo "You must specify right a value for sga."
                echo "Example: 4096 or 4096M or 4G"
                echo ""
                continue
            fi
        done
        
        ####################################################################################
        #get container
        ####################################################################################
        while true
        do
            read -p "`echo -e "Do you create container database? yes/no. Default \e[1;33m no \e[0m: "`" ContainerConfirm
            if [ ${ContainerConfirm:-no} == "no" ];then
                break
            elif [ ${ContainerConfirm:-no} == "yes" ];then
                read -p "`echo -e "PDB name:  "`" PDBName
                if [ ! ${PDBName} ];then
                    echo "PDB name must be not empty!"
                    continue
                else
                    break
                fi
            else
                echo "You only enter yes or no."
                continue
            fi
        done
        
        ####################################################################################
        #confirm all infomation
        ####################################################################################
        echo ""
        echo -e "\e[1;31mYour instance name is ${osid} \e[0m"
        echo -e "\e[1;31mYour instance characterset is ${InCharacter} \e[0m"
        echo -e "\e[1;31mYour instance datafile location is ${DiskGroupName} \e[0m"
        echo -e "\e[1;31mYour instance SGA is ${SGASize} \e[0m"
        echo -e "\e[1;31mYour instance PGA is ${PGASize} \e[0m"
        if [ "${ContainerConfirm}" == "yes" ];then
            echo -e "\e[1;31mYour instance PDB name is ${PDBName} \e[0m"
        fi
        echo ""
        while true
        do
            read -p "`echo -e "Please confirm instance information. yes/no. Default \e[1;33m yes \e[0m: "`" InfoConfirm
            if [ "${InfoConfirm:-yes}" == "yes"  ];then
                break
            elif [ "${InfoConfirm:-yes}" == "no"  ];then
                break
            else
                echo "You only enter yes or no."
                continue
            fi
        done
        if [ "${InfoConfirm:-yes}" == "yes"  ];then
            break
        else
            continue
        fi
        
    done
    ####################################################################################
    #install instance
    ####################################################################################
    if [ ${ContainerConfirm:-no} == "no" ];then
        dbca -silent -ignorePreReqs -createDatabase \
        -templateName General_Purpose.dbc  \
        -databaseConfigType RAC \
        -gdbName ${osid} \
        -sid ${osid} \
        -sysPassword oracle \
        -systemPassword oracle \
        -dbsnmpPassword oracle \
        -characterSet ${InCharacter} \
        -nationalCharacterSet AL16UTF16  \
        -storageType ASM \
        -diskGroupName +${DiskGroupName} \
        -nodelist ${NodeList} \
        -asmSysPassword oracle \
        -initParams processes=1500,pga_aggregate_target=${PGASize},sga_target=${SGASize}
    else
        dbca -silent -ignorePreReqs -createDatabase \
        -templateName General_Purpose.dbc  \
        -databaseConfigType RAC \
        -gdbName ${osid} \
        -sid ${osid} \
        -sysPassword oracle \
        -systemPassword oracle \
        -dbsnmpPassword oracle \
        -characterSet ${InCharacter} \
        -nationalCharacterSet AL16UTF16  \
        -storageType ASM \
        -diskGroupName +${DiskGroupName} \
        -nodelist ${NodeList} \
        -asmSysPassword oracle \
        -initParams processes=1500,pga_aggregate_target=${PGASize},sga_target=${SGASize} \
        -createAsContainerDatabase true \
        -pdbName ${PDBName} \
        -numberOfPDBs 1 \
        -pdbAdminPassword oracle
    fi
    
    
        
}
####################################################################################
#entrance of script
####################################################################################
UnzipAndInstallRdbms
InstallInstance









來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28572479/viewspace-2740409/,如需轉載,請註明出處,否則將追究法律責任。

相關文章