Linux7 安装 Oracle 19C 脚本(支持单机和RAC)
#!/bin/bash
export db_type=SI
export PubIP1=192.168.56.6
export hostname1=Jeff-Test01
export PubIP2=192.168.56.7
export hostname2=Jeff-Test02
export VIP1=192.168.56.8
export VIP1NAME=Jeff-Test-VIP1
export VIP2=192.168.56.9
export VIP2NAME=Jeff-Test-VIP2
export SCANIP=192.168.56.10
export SCANNAME=Jeff-Test-SCAN
export Pub_Mask=24
export scanPort=1521
export cluster_name=Jeff-test
export ORA_SID_PREFIX=Jefftest
export DB_NAME=Jefftest
export DB_UNIQUE_NAME=Jefftest
export ORA_SID1=${ORA_SID_PREFIX}1
export ORA_SID2=${ORA_SID_PREFIX}2
export PrivIP1=192.168.11.6
export Priv1NAME=Jeff-Test-Priv1
export PrivIP2=192.168.11.7
export Priv2NAME=Jeff-Test-Priv2
export Priv_Mask=24
export ntpserver=10.10.7.254
export oraver=19
export rootpw="Jeff_Test01"
export ORAPWD="Jeff_Test01"
export db_admin_pwd="Jeff_Test01"
export needcdb=n
export needpdb=n
export PDB_SID=Jeff_PDB
export sgasize=2GB
export sga_max_size=2GB
export pgasize=500MB
export recovery_size=
export processes=5000
export redoLogFileSize=2048
export useOMF=true
export rootdir=/u01
export ORA_BASE=$rootdir/app/oracle
export ORA_HOME=$ORA_BASE/product/19.3.0/db_1
export ORA_INV=$rootdir/app/oraInventory
export GI_BASE=$rootdir/app/grid
export GI_HOME=$rootdir/app/19.3.0/grid
export logfile=/tmp/install_$(date +%F).log
export disk_management=FS
export fs_data_dir=$ORA_BASE/oradata
export fs_fra_dir=/arch
export fs_redo_dir=/redo
export fs_redo2_dir=/redo2
export mapper_dir=/dev
export mapper_prefix=sd
export asm_ocr_disks="b c d"
export asm_ocr_dir=OCR_VOTE
export asm_fra_disks="e f g"
export asm_fra_dir=FRA
export asm_data_disks="h i j"
export asm_data_dir=DATA
export need_format=n
export softroot=/tmp/soft
export softdir=$softroot/$oraver
export db_zip_file=LINUX.X64_193000_db_home.zip
export grid_zip_file=LINUX.X64_193000_grid_home.zip
export opatch_zip_file=p6880880_190000_Linux-x86-64_OPatch-12.2.0.1.39.zip
export ru=35320081
split1() {
echo -e "\033[1;40;33m\n\n ===================================== $(date +'%F %T') =====================================\n$1\033[0m"
}
result_err() {
echo -e "\033[31m\n (*>﹏<*)(*>﹏<*)(*>﹏<*) $1 (*>﹏<*)(*>﹏<*)(*>﹏<*)\n\033[0m"
}
result_ok() {
echo -e "\n\033[32m (*^_^*)(*^_^*)(*^_^*) $1 (*^_^*)(*^_^*)(*^_^*)\033[0m\n"
}
if [ -z ${db_zip_file} ]; then
db_zip_file=LINUX.X64_193000_db_home.zip
fi
if [ -z ${grid_zip_file} ]; then
grid_zip_file=LINUX.X64_193000_grid_home.zip
fi
if [ -z ${opatch_zip_file} ]; then
opatch_zip_file=p6880880_190000_Linux-x86-64.zip
fi
export ru_zip_file=$softdir/p${ru}*.zip
export RUs=$softdir/patch/$ru
if [ -d $softroot ] && [ ! -d $softdir/patch ]; then
mkdir -p $softdir/patch
fi
clear
figletexist=$(type figlet 2>/dev/null | wc -l)
if [ $figletexist -gt 0 ]; then
figlet -cf banner -w 100 "$db_type install"
fi
export UPPER_DB_NAME=$(echo $DB_NAME | tr [:lower:] [:upper:])
export disk_management=$(echo $disk_management | tr [:lower:] [:upper:])
export db_type=$(echo $db_type | tr [:lower:] [:upper:])
if [ "$db_type" != "SI" ] && [ "$db_type" != "RAC" ]; then
result_err "# Please provide the correct DB type(RAC/SI), you have specified : $db_type"
exit 1
fi
if [ -z $sga_max_size ]; then
sga_max_size=$sgasize
fi
mem_kb=$(grep MemTotal /proc/meminfo | awk '{print $2}')
sga_max_size=$(echo $sga_max_size | tr [:lower:] [:upper:])
sganum=$(echo $sga_max_size | tr -cd "[0-9]")
sgachar=$(echo $sga_max_size | tr -d "[0-9]")
if [ "$sgachar" == "GB" ] || [ "$sgachar" == "G" ]; then
huge=$(($sganum * 1024 / 2 + 10))
sga_kb=$(($sganum * 1024 * 1024))
elif [ "$sgachar" == "MB" ] || [ "$sgachar" == "M" ]; then
huge=$(($sganum / 2 + 10))
sga_kb=$(($sganum * 1024))
elif [ "$sgachar" == "KB" ] || [ "$sgachar" == "K" ]; then
huge=$(($sganum / 1024 / 2 + 10))
sga_kb=$sganum
elif [ -z "$sgachar" ]; then
huge=$(($sganum / 1024 / 1024 / 2 + 10))
sga_kb=$(($sganum / 1024))
else
echo "Can not get HugePage size"
exit 1
fi
if [ $mem_kb -le 32000000 ];then
echo "# Avaliable RAM less than 32000000kb,not set hugepage"
huge=
fi
if [ $sga_kb -lt $(($mem_kb*3/10)) ];then
result_err "# SGA set less than 30% of MemTotal"
elif [ $sga_kb -gt $(($mem_kb*7/10)) ];then
result_err "# SGA set Larger than 70% of MemTotal"
fi
export OS=$(uname -s)
if [ "$OS" != "Linux" ]; then
result_err "# Only supported on Linux"
exit 1
fi
if [ $disk_management == "FS" ]; then
for dir in $fs_data_dir $fs_fra_dir $fs_redo_dir $fs_redo2_dir; do
if [ ! -d $dir ] && [ -n "$dir" ]; then
mkdir -p $dir
fi
done
fi
if [ "$db_type" == "SI" ]; then
export PubIP2=
export hostname2=
export VIP1=
export VIP1NAME=
export VIP2=
export VIP2NAME=
export SCANIP=
export SCANNAME=
export cluster_name=
export ORA_SID1=$ORA_SID_PREFIX
export ORA_SID2=
export PrivIP1=
export Priv1NAME=
export PrivIP2=
export Priv2NAME=
export Priv_Mask=
fi
echo "################ Begin : $(date +'%F %T') ################" >$logfile
chmod -R 777 $softroot
export db_install_file=$softdir/$db_zip_file
export grid_install_file=$softdir/$grid_zip_file
export opatch_install_file=$softdir/$opatch_zip_file
if [ ! -f ${db_install_file} ]; then
result_err "Error: DB install file not found!" >>$logfile
exit 1
elif [ "${upper_db_type}" == "RAC" ] && [ ! -f ${grid_install_file} ]; then
result_err "You select Db type as RAC, But can not found GRID install file!" >>$logfile
exit 1
elif [ -n "${ru}" ] && [ ! -f ${ru_zip_file} ]; then
result_err "You Want to apply an RU, But not found zip file!" >>$logfile
exit 1
if [ ! -f ${opatch_install_file} ]; then
result_err "You choose to apply RU and must update OPatch" >>$logfile
exit 1
fi
fi
split1 "# 按照输入参数解析各文件压缩包名如下,The input installation media is analyzed as follows:
DB install file: $db_install_file
GRID install file: $grid_install_file
OPatch install file: $opatch_install_file
RU zip file: $ru_zip_file" >>$logfile
split1 "# 按照输入参数解析各文件压缩包名如下,The input installation media is analyzed as follows:
DB install file: $db_install_file
GRID install file: $grid_install_file
OPatch install file: $opatch_install_file
RU zip file: $ru_zip_file"
sleep 5
export tmp1=$(echo $Pub_Mask | grep -o '\.' | wc -l)
if [ $tmp1 -eq 3 ]; then
export Pub_Mask=$(echo $Pub_Mask | sed 's/\./ + /g;s/255/8/g;s/254/7/g;s/252/6/g;s/248/5/g;s/240/4/g;s/224/3/g;s/192/2/g;s/128/1/g' | bc)
elif [ $tmp1 -gt 0 ]; then
result_err "# 请输入正确的 Public 网卡子网掩码($Pub_Mask)" >>$logfile
exit 1
elif [ $Pub_Mask -lt 32 ] && [ $Pub_Mask -gt 1 ] && [ $tmp1 -eq 0 ]; then
echo -e
else
result_err "# 请输入正确的 Public($Pub_Mask) 网卡掩码位数字 2-31" >>$logfile
exit 1
fi
echo "# 业务IP子网掩码: $Pub_Mask" >>$logfile
if [ -n "$Priv_Mask" ] && [ "$db_type" == "RAC" ]; then
export tmp2=$(echo $Priv_Mask | grep -o '\.' | wc -l)
if [ $tmp2 -eq 3 ]; then
export Priv_Mask=$(echo $Priv_Mask | sed 's/\./ + /g;s/255/8/g;s/254/7/g;s/252/6/g;s/248/5/g;s/240/4/g;s/224/3/g;s/192/2/g;s/128/1/g' | bc)
elif [ $tmp2 -gt 0 ]; then
result_err "# 请输入正确的 Private 网卡子网掩码($Priv_Mask)" >>$logfile
exit 1
elif [ $Priv_Mask -lt 32 ] && [ $Priv_Mask -gt 1 ] && [ $tmp2 -eq 0 ]; then
echo -e
else
result_err "# 请输入正确的 Private($Priv_Mask) 网卡掩码位数字 2-31" >>$logfile
exit 1
fi
echo "# 虚拟IP子网掩码: $Priv_Mask" >>$logfile
fi
get_ipgate() {
ipgate_int=$(echo $1 | awk -F'.' '{print $1*(256^3) + $2*(256^2) + $3*256 + $4}')
((ipgate = ((ipgate_int >> ((32 - $2)))) << ((32 - $2))))
echo $((ipgate >> 24 & 0xFF)).$((ipgate >> 16 & 0xFF)).$((ipgate >> 8 & 0xFF)).$((ipgate & 0xFF))
}
export pub_subnet=$(get_ipgate $PubIP1 $Pub_Mask)
if [ -n "$Priv_Mask" ] && [ "$db_type" == "RAC" ]; then
export priv_subnet=$(get_ipgate $PrivIP1 $Priv_Mask)
fi
echo "# pub-subnet: $pub_subnet ; Priv-subnet: $priv_subnet" >>$logfile
netcard_name() {
findIP=$1
for devEnum in $(ip link show | grep ^[0-9]\\+: | awk -F ' ' {
'print $2'}); do
devName=${devEnum%:}
devName=${devName%@*}
if [ $(ip addr show $devName | grep -c $findIP) -gt 0 ]; then
echo $devName
break
fi
done
}
if [ "$(hostname)" == "$hostname1" ]; then
pub_netcard=$(netcard_name $PubIP1)
if [ -n "$PrivIP1" ] && [ "$db_type" == "RAC" ]; then
priv_netcard=$(netcard_name $PrivIP1)
fi
echo "# pub_netcard: $pub_netcard ; priv_netcard: $priv_netcard" >>$logfile
fi