靜默安裝19C RAC的指令碼
指令碼為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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- rac靜默安裝
- oracle 19C 靜默安裝Oracle
- windows靜默安裝Oracle11G指令碼WindowsOracle指令碼
- 靜默安裝SqlServer2008指令碼SQLServer指令碼
- PackageInstaller 5.0原始碼分析靜默安裝與靜默解除安裝Package原始碼
- Android靜默安裝和靜默解除安裝Android
- oracle 11g rac 靜默解除安裝Oracle
- 11.2.0.3 RAC 靜默安裝第二彈
- 11.2.0.3 RAC 靜默安裝第一彈
- 【DBCA -SILENT】靜默安裝之rac資料庫安裝資料庫
- RedHat 7.7 平臺安裝19c(19.3) RAC 靜默詳細操作過程Redhat
- oracle單機靜默安裝指令碼oracleAutoInstall.shOracle指令碼
- RHEL5 Oracle 11G R2 RAC 靜默安裝 (二)GI靜默安裝Oracle
- Oracle 19C的下載和安裝部署(圖形安裝和靜默安裝)Oracle
- oracle 19c dataguard silent install (oracle 19c dataguard 靜默安裝)Oracle
- Oracle 10g RAC 靜默安裝過程Oracle 10g
- Linux下利用指令碼靜默安裝Oracle11GLinux指令碼Oracle
- 19c(19.3) 單機資料庫靜默安裝資料庫
- dbca 靜默安裝
- Oracle 靜默安裝Oracle
- Oracle靜默安裝Oracle
- oracle11g在linux7的靜默安裝指令碼OracleLinux指令碼
- Android靜默安裝應用和靜默解除安裝應用Android
- 靜默安裝Azure CLI
- 靜默安裝ORACLE(文件)Oracle
- linux7 靜默安裝 11GR2 RACLinux
- Oracle Linux 7.1 靜默安裝Oracle 18c RACOracleLinux
- Oracle 11gr2 RAC on OEL6.4靜默安裝Oracle
- 安裝RAC 19C
- 靜默安裝功能的實現
- Oracle 12cR1 RAC 在VMware Workstation上安裝(下)—靜默安裝Oracle
- oracle靜默安裝raw裝置Oracle
- 靜默安裝oracle時報錯Oracle
- ORACLE 11.2.0.4靜默安裝Oracle
- 靜默安裝oracle軟體Oracle
- Oracle靜默安裝(單機)Oracle
- 靜默安裝、建庫(轉)
- 靜默安裝ORACLE 軟體Oracle