正统 数据库 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

posted @ 2020-08-31 11:41  ISLATH  阅读(184)  评论(0)    收藏  举报