Oracle 一键安装脚本(for Linux 7)

本文提供了在Linux 7系统上快速安装Oracle 19c数据库的详细步骤,包括安装介质的存放路径和所需文件,帮助读者简化安装过程。
摘要由CSDN通过智能技术生成

Oracle 一键安装脚本(for Linux 7)

安装介质所在目录
/tmp/soft/
├── 11
├── 12
├── 19
│ ├── LINUX.X64_193000_db_home.zip
│ ├── LINUX.X64_193000_grid_home.zip
│ ├── p6880880_190000_Linux-x86-64-OPatch_12.2.0.1.36.zip
│ └── patch

#!/bin/bash
## Linux7上安装Oracle数据库一键配置脚本
# 安装介质所在目录
# You must put the installation package in the /tmp/soft directory, Like this:
# /tmp/soft/
# ├── 11
# ├── 12
# ├── 19
# │ ├── LINUX.X64_193000_db_home.zip
# │ ├── LINUX.X64_193000_grid_home.zip
# │ ├── p6880880_190000_Linux-x86-64-OPatch_12.2.0.1.36.zip
# │ └── patch
# 定义变量
# db_type | si/SI --单实例;rac/RAC --RAC
export db_type=RAC

# 定义 Public IP、Virtual IP、SCAN IP 等业务网段 IP 地址信息
export PubIP1=10.10.224.133
export hostname1=Jeff-Test-224-133
export PubIP2=10.10.224.134
export hostname2=Jeff-Test-224-134
export PubIP3=
export hostname3=
export VIP1=10.10.224.143
export VIP1NAME=Test-19C-RAC-VIP1
export VIP2=10.10.224.144
export VIP2NAME=Test-19C-RAC-VIP2
export VIP3=
export VIP3NAME=
export SCANIP=10.10.224.145
export SCANNAME=Test-19C-RAC-SCAN
# Pub_Mask 业务网络子网掩码,数字 23 或者 255.255.254.0 均支持
export Pub_Mask=22
export scanPort=1521
export cluster_name=RACTest19C
export ORA_SID_PREFIX=test19c
export DB_NAME=test19c
export DB_UNIQUE_NAME=test19c
export ORA_SID1=${ORA_SID_PREFIX}1
export ORA_SID2=${ORA_SID_PREFIX}2
# 定义心跳网络 Private IP 信息
export PrivIP1=11.11.11.133
export Priv1NAME=Test-19C-RAC-Priv1
export PrivIP2=11.11.11.134
export Priv2NAME=Test-19C-RAC-Priv2
export PrivIP3=
export Priv3NAME=
# Priv_Mask 心跳网络子网掩码,数字 23 或者 255.255.254.0 均支持
export Priv_Mask=24
# ntpserver 用于配置 chronyd 服务
export ntpserver=10.10.7.254
# oraver:安装的数据库版本:11、12、18、19、23
export oraver=19
# 指定root密码、oracle&grid密码、DB管理密码
export rootpw="qwer4321"
export ORAPWD="qwer4321" # oracle && grid 设置相同密码
export db_admin_pwd="Jeff_Test01" # 预设数据库管理使用的统一密码
# needcdb 指定是否Y(y)需要 CDB 容器数据库,needpdb 是否Y(y)需要创建 PDB(限制创建 1 个),PDB_SID 指定 PDB 名字
export needcdb=n
export needpdb=n
export PDB_SID=Jeff_PDB
# 指定内存、FRA参数设置,如下是很小的参数了,再小会导致安装失败
export sgasize=3GB
export sga_max_size=3GB
export pgasize=500MB
export recovery_size=
export processes=5000
export redoLogFileSize=200
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
# 磁盘管理方式:ASM、FS(File System), Deafult --> ASM
export disk_management=ASM
# FS 文件系统磁盘管理(ASM 管理时不需要填写)
export fs_data_dir=$ORA_BASE/oradata
export fs_fra_dir=/arch
export fs_redo_dir=/redo
export fs_redo2_dir=/redo2
# ASM 磁盘管理(FS管理时不需要填写)
# mapper_dir 指定提供给ASM管理的磁盘识别路径,或者 /dev/mapper 等
export mapper_dir=/dev
# sd : 提供给ASM管理的磁盘前缀
export mapper_prefix=sd
# asm_ocr_disks: OCR\Voting 磁盘组,多组使用空格\,\;等字符隔开,建议命令行使用,,不容易混乱;不写前缀
export asm_ocr_disks="b c d"
export asm_ocr_dir=OCR_VOTE
# asm_fra_disks:归档日志、闪回区 磁盘组
export asm_fra_disks="e f"
export asm_fra_dir=FRA
# asm_data_disks:数据文件 磁盘组;默认 redo 存放 $asm_data_dir 和 $asm_fra_dir,需要另外配置则调整脚本
export asm_data_disks="g h"
export asm_data_dir=DATA
# 指定是否需要格式化磁盘 Y(y)格式化,其他不执行
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=35319490

############################################ 以上是主要参数定义,以下部分可不设置 ############################################
# 以下部分没有参数设置
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"
}
# db_zip_file 默认值 LINUX.X64_193000_db_home.zip
if [ -z ${db_zip_file} ]; then
db_zip_file=LINUX.X64_193000_db_home.zip
fi
# grid_zip_file 默认值 LINUX.X64_193000_grid_home.zip
if [ -z ${grid_zip_file} ]; then
grid_zip_file=LINUX.X64_193000_grid_home.zip
fi
# opatch_zip_file 默认值 p6880880_190000_Linux-x86-64.zip,每次下载最新文件
if [ -z ${opatch_zip_file} ]; then
opatch_zip_file=p6880880_190000_Linux-x86-64.zip
fi
# 需要apply的RU,不 apply 则置空
export ru_zip_file=$softdir/p${ru}*.zip
# 识别 RU 对应的 zip 文件
export RUs=$softdir/patch/$ru
# 安装时需要同时安装的 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 PubIP3=
export hostname3=
export VIP1=
export VIP1NAME=
export VIP2=
export VIP2NAME=
export VIP3=
export VIP3NAME=
export SCANIP=
export SCANNAME=
export cluster_name=
export ORA_SID1=$ORA_SID_PREFIX
export ORA_SID2=
# 定义心跳网络 Private IP 信息
export PrivIP1=
export Priv1NAME=
export PrivIP2=
export Priv2NAME=
export PrivIP3=
export Priv3NAME=
# Priv_Mask 心跳网络子网掩码,数字 23 或者 255.255.254.0 均支持
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

# 如下实现掩码数字计算:255.255.254.0 转换 23
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() {
   
#ip地址转换整数
ipgate_int=$(echo $1 | awk -F'.' '{print $1*(256^3) + $2*(256^2) + $3*256 + $4}')
#主机位:32 - $2
#按位运算,右移,ip地址移除主机位,保留网络位
#按位运算,左移,ip地址以0补全主机位
((ipgate = ((ipgate_int >> ((32 - $2)))) << ((32 - $2))))
#获取子网:整数转换ip地址,整数右移取低8位
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值