正统 数据库 Oracle Database 11g R2 CentOS 静默安装脚本
简介
在 CentOS 6.10, CentOS 7.4, CentOS 8.0 最小化安装的系统环境下测试通过。完整版的含有修改监听端口号、小改数据库参数和打补丁的脚本
执行脚本前准备
- 足够的硬件资源(1GB 内存,10GB 硬盘,2GB SWAP)
- 安装操作系统
- 配置系统YUM源
- 上传安装数据库所需文件
目录结构
建议在系统 /tmp 目录下创建以下目录结构,存放脚本至 /tmp/db/lite-install-11gr2.sh 中,存放数据库安装文件并重命名以 db_ 开头,其他目录和文件先不理会
db/
├── lite-install-11gr2.sh
├── _packages
│ ├── db_p13390677_112040_Linux-x86-64_1of7.zip
│ ├── db_p13390677_112040_Linux-x86-64_2of7.zip
│ ├── opatch_p6880880_112000_Linux-x86-64.zip
│ └── psu_db_p28729262_112040_Linux-x86-64.zip
├── runas_oracle
│ ├── chlsnrp.sh
│ ├── chpara.sh
│ └── dbpatch.sh
└── .temp
轻巧版安装脚本
#!/bin/bash
# # # # # # # # # # # # # # # # # # # # # #
# #
# ISLATH at Dec 27,2018 #
# #
# # # # # # # # # # # # # # # # # # # # # #
# sha1sum p13390677_112040_Linux-x86-64_*
# 983461d6442b0833630475ec4885278588585651 *p13390677_112040_Linux-x86-64_1of7.zip
# 2e628d8cac5d1c6fff15e728b1f227747bf2ded8 *p13390677_112040_Linux-x86-64_2of7.zip
#parameters(optional)
#chrset='AL32UTF8'
chrset='ZHK16GBK'
dbname='midwacs'
password='midwacs'
if [ `echo ${#dbname}` -gt 8 ]
then
echo "dbname can not over 8 charactors"
exit 1
fi
#check basic environment
midwacs_osmem=`grep -i memtotal /proc/meminfo | awk '{print $2}'`
midwacs_osdisk=`df / | tail -1 | awk '{print $(NF-2)}'`
find ./_packages/*.zip
if [ "$?" -ne "0" ]; then
echo "put zipped database package and this script in same path "
exit 1
elif [ `id -u` -ne "0" ]; then
echo "should be running as root user "
exit 2
elif [ ${midwacs_osmem} -lt "1000000" ]; then
echo "memory insufficient"
exit 3
elif [ ${midwacs_osdisk} -lt "8000000" ]; then
echo "disk space insufficient"
exit 4
fi
#check yum sources
yum makecache fast
if [ "$?" -ne "0" ]; then
echo "please check yum repository"
exit 5
fi
#unzip(extract the database installation file)
yum install -y \
unzip
#openssh-clients(optional)
yum install -y \
openssh-clients
#expect & psmisc(optional)
yum install -y \
expect \
psmisc
#chrony, ntp(optional)
#yum install -y \
# ntp \
# chrony
#xdpy(optional)
yum install -y \
xterm \
xdpyinfo \
xorg-x11-xauth
#oracle database dependences(11g)
yum install -y \
compat-libstdc++-33 \
compat-libcap1 \
libaio-devel \
elfutils-libelf-devel \
gcc-c++ \
sysstat \
ksh
#create user, groups
groupadd -g 6000 oinstall
groupadd -g 6001 dba
useradd -u 6200 -g oinstall -G dba oracle
echo "oracle:${password:=midwacs}" | chpasswd
#config user(oarcle) ~/.bash_profile
cp -f ~oracle/.bash_profile{.midwacsbak,} 2> /dev/null
cp -f ~oracle/.bash_profile{,.midwacsbak}
echo 'export ORACLE_BASE=/u01/app/oracle' >> ~oracle/.bash_profile
echo 'export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1' >> ~oracle/.bash_profile
echo 'export NLS_LANG=american_america.zhs16gbk' >> ~oracle/.bash_profile
echo 'export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin' >> ~oracle/.bash_profile
echo 'export LANG=en.US' >> ~oracle/.bash_profile
echo "export ORACLE_SID=${dbname:=midwacs}" >> ~oracle/.bash_profile
#create directorys
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oraInventory
chown -R oracle:oinstall /u01/app/oraInventory
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oraInventory
chmod -R 775 /u01/app/oracle
#config ntp services
echo 'OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g -x"' > /etc/sysconfig/ntpd
service ntpd restart
chkconfig ntpd on
if [ "$?" -ne "0" ]; then
rm -rf '/etc/sysconfig/ntpd'
fi
#set firewall and selinux disable
service iptables stop
chkconfig iptables off
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#config hosts (maybe wrong)
cp -f /etc/hosts{.midwacsbak,} 2> /dev/null
cp -f /etc/hosts{,.midwacsbak}
echo "127.0.0.1 `hostname`" >> /etc/hosts
#config minimum kernal parameters for installation
#kernal.shmall
#kernal.shmmax
cp -f /etc/sysctl.conf{.midwacsbak,} 2> /dev/null
cp -f /etc/sysctl.conf{,.midwacsbak}
cat >> /etc/sysctl.conf <<EOF
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
EOF
sysctl -p
#config the pam_limits module
cp -f /etc/security/limits.conf{.midwacsbak,} 2> /dev/null
cp -f /etc/security/limits.conf{,.midwacsbak}
cat >> /etc/security/limits.conf <<EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
EOF
#unzip oracle database installation files
mkdir -p .temp
find ./_packages/db*.zip -exec unzip -d ./.temp -o {} \;
#12c required one more packages, 11g prerequistite "pdksh" missing (Doc ID 1454982.1)
if [ ! -e "./.temp/database/response/dbca.rsp" ]; then
echo "check database zip package"
exit 6
fi
midwacs_dbver=`ls ./.temp/database/stage| grep server.*.xml | cut -d. -f3 | cut -d_ -f1`
if [ "${midwacs_dbver}" -ge "12" ]; then
yum install -y smartmontools
sed -i 's/11.2.0/12.2.0/g' ~oracle/.bash_profile
else
sed -i 's/CV_ASSUME_DISTID=OEL4/CV_ASSUME_DISTID=OEL6/g' ./.temp/database/stage/cvu/cv/admin/cvu_config
fi
#11g on centos7 stuck at 86%
_genfix() {
ps -f | grep 'bash midwacs_fix.sh' | grep -v 'grep' | awk '{print $2}' | xargs kill
rm -rf midwacs_fix.sh
cat > ./.temp/midwacs_fix.sh <<EOF
while true
do
midwacs_insmk='/u01/app/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk'
if [ -e \${midwacs_insmk} ]; then
cp -f \${midwacs_insmk}{.midwacsbak,} 2> /dev/null
cp -f \${midwacs_insmk}{,.midwacsbak}
sed -i 's/\$(MK_EMAGENT_NMECTL)/\$(MK_EMAGENT_NMECTL) -lnnz11/g' \${midwacs_insmk}
exit 0
fi
sleep 1
done
EOF
}
midwacs_osver=`cat /etc/redhat-release | tr -cd "[0-9]"`
if [[ "${midwacs_osver:0:1}" -ge "7" && "midwacs_dbver" -lt "12" ]]; then
_genfix
bash ./.temp/midwacs_fix.sh &
fi
#generate response file
_gendbrsp() {
cat > ./.temp/db.rsp <<EOF
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=localhost
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.EEOptionsSelection=false
oracle.install.db.DBA_GROUP=dba
oracle.install.db.config.starterdb.control=DB_CONTROL
DECLINE_SECURITY_UPDATES=true
oracle.installer.autoupdates.option=SKIP_UPDATES
EOF
}
#silent installation for 11g
if [ "${midwacs_dbver}" -ge "12" ]; then
exit 0
fi
#change UGO
chown -R oracle:oinstall .temp
_gendbrsp
#run prerequestcheck
# 0
#runInstaller silent
# 1
su - oracle -c "$PWD/.temp/database/runInstaller -silent -ignoreSysPrereqs \
-ignorePrereq -showProgress -waitforcompletion -responseFile $PWD/.temp/db.rsp"
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/11.2.0/dbhome_1/root.sh
# 2
# 3
su - oracle -c "netca /silent /responsefile $PWD/.temp/database/response/netca.rsp"
su - oracle -c "lsnrctl start listener"
# 4
#non use
#exit 0
su - oracle -c "dbca -silent -createdatabase \
-templateName General_Purpose.dbc \
-gdbname ${dbname:=midwacs} -sid ${dbname:=midwacs} \
-redoLogFileSize 200 \
-characterSet ${chrset:=ZHS16GBK} \
-responseFile NO_VALUE \
-sysPassword ${password:=midwacs} -systemPassword ${password:=midwacs} \
-memoryPercentage 64 \
-databaseType OLTP \
-emConfiguration NONE"
执行脚本
以 root 用户进行以下操作
cd /tmp/db
bash -x lite-install-11gr2.sh
如果使用的是本地YUM源,10分钟内基本可以完成安装以及建库操作,届时,切换到 oracle 用户连接数据库了,脚本默认数据库名称密码均为 midwacs ,可按需修改
Good Luck! Aug 31, 2020

浙公网安备 33010602011771号