Created
October 24, 2019 11:26
-
-
Save benzBrake/2a7894a5040dff501a68e01fee774147 to your computer and use it in GitHub Desktop.
Oracle 12cR2 Single Node Onekey Install Script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| export PATH=${PATH}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:. | |
| # 函数定义 | |
| function info() { | |
| echo -e "\e[36m[信息]$*\e[0m" | |
| } | |
| function warn() { | |
| echo -e "\e[33m[警告]$*\e[0m" | |
| } | |
| function error() { | |
| echo -e "\e[31m[错误]$*\e[0m" | |
| } | |
| function getUserRoot() { | |
| cat /etc/passwd | grep ^${1} | awk -F: '{print $6}' | |
| } | |
| function backupfile() { | |
| local POSTFIX=$(date +"%Y%m%d%H%M%S") | |
| [[ ${DEBUG} == "true" ]] && info "备份文件 ${1} 到 $1.${POSTFIX}" | |
| cp -f ${1} ${1}.${POSTFIX} | |
| [[ ${DEBUG} == "true" ]] && echo -ne "\b\bOK" | |
| } | |
| # 默认参数定义 | |
| WORKING_DIR=${PWD} | |
| BASE_PATH=/u01/app | |
| DB_VERSION=12.2.0 | |
| ORACLE_SID=ORCL | |
| PASSWORD=oracle | |
| PDB_ENABLE=false | |
| PDB_INSTANCE=1 | |
| PDB_NAME=PDB | |
| AUTO_START=false | |
| INSTALL_DELAY=200 | |
| CREATEDB_DELAY=300 | |
| CREATEDB_CHAR= | |
| DEGUG=false | |
| IP_ADDR=$(ip addr | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | grep -v ^127 | grep -v 255$ | head -n1) | |
| # 参数获取 | |
| UNKNOWN_ACTION="" | |
| action=$@ | |
| for i in "$@" | |
| do | |
| case $i in | |
| -a|--autostart) | |
| AUTO_START="true" | |
| shift | |
| ;; | |
| -c=*|--creatadbdelay=*) | |
| CREATEDB_DELAY="${i#*=}" | |
| shift | |
| ;; | |
| -C=*|--character=*) | |
| CREATEDB_CHAR="${i#*=}" | |
| shift | |
| ;; | |
| -d|--debug) | |
| DEGUG=true | |
| shift | |
| ;; | |
| -i=*|--installdelay=*) | |
| INSTALL_DELAY="${i#*=}" | |
| shift | |
| ;; | |
| -p=*|--pdbname=*) | |
| PDB_ENABLE=true | |
| PDB_NAME="${i#*=}" | |
| shift | |
| ;; | |
| -n=*|--pdbnums=*) | |
| PDB_ENABLE=true | |
| PDB_INSTANCE="${i#*=}" | |
| shift | |
| ;; | |
| -k=*|--password=*) | |
| PASSWORD="${i#*=}" | |
| shift | |
| ;; | |
| -s=*|--sid=*) | |
| ORACLE_SID="${i#*=}" | |
| shift | |
| ;; | |
| -x=*|--prefix=*) | |
| BASE_PATH="${i#*=}" | |
| shift | |
| ;; | |
| -h|--help) | |
| cat >&1<<EOF | |
| Usage: $(basename $0) [OPTION[=PATTERN]]" | |
| Oracle 12cR2 (12202) Onekey Installer." | |
| Different OPTION has different PATTERN." | |
| Example: $(basename $0) -s=ZBBB -x=/opt" | |
| ============================================== | |
| OPTIONs and PATTERNs" | |
| -d|--debug Enable debug | |
| -a|--autostart Auto mount database at start | |
| -k=STR|--password=STR Password for all oracle user | |
| -s=STR|--sid=STR Oracle SID | |
| -x=STR|--prefix=STR Install directory | |
| -p=STR|--pdbname=STR Database name for ContainerDB | |
| -n=NUM|--pdbnums=NUM ContainerDB nums | |
| -C=STR|--character=STR Database character set | |
| -i=NUM|--installdelay=NUM Delay for install database | |
| software in silent mode | |
| -c=NUM|--creatadbdelay=NUM Delay for create database | |
| in silent mode | |
| Report bugs to Ryan Lieu <github-benzbrake@woai.ru> | |
| Last update: 2019-10-24 | |
| EOF | |
| exit 0 | |
| ;; | |
| *) | |
| UNKNOWN_ACTION="${UNKNOWN_ACTION} ${i}" | |
| shift | |
| ;; | |
| esac | |
| done | |
| cat >&1<<EOF | |
| # ====================================================== | |
| # Oracle 12cR2 Single Node 一键安装脚本 For CentOS 7.6.1810 | |
| # Ryan Lieu <github-benzBrake@woai.ru> | |
| # Filename: onekey_install_oracle_12cR2.sh | |
| # Created: 2019-10-19 | |
| # Updated: 2019-10-24 | |
| # Website: https://doufu.ru | |
| # ====================================================== | |
| # Tips: | |
| # 1、请提前配置好yum源或者手工安装好必须rpm包 | |
| # 2、Oracle 自动安装到 ${BASE_PATH/%\//}/oracle下,请确认空间充足 | |
| # 3、SID为${ORACLE_SID} | |
| # 4、是否启用PDB:${PDB_ENABLE} | |
| # 5、是否自启动:${AUTO_START} | |
| # 6、如果想要修改默认参数请查看帮助[-h] | |
| EOF | |
| if [[ ! -z ${UNKNOWN_ACTION} ]]; then | |
| echo -n "# 7." | |
| warn "未知参数:[${UNKNOWN_ACTION}]" | |
| fi | |
| cat >&1<<EOF | |
| # ====================================================== | |
| EOF | |
| if [[ "${DEGUG}" == "true" ]]; then | |
| set -ex | |
| fi | |
| # 0、检查 | |
| [[ $(id -u) != "0" ]] && { | |
| error "请使用 root 用户运行此脚本"; | |
| exit 1; | |
| } | |
| if [[ ! -f runInstaller ]]; then | |
| error "请在oracle安装目录执行此文件" | |
| exit 2 | |
| fi | |
| OS_VERSION=$(cat /etc/*-release | head -n1 | awk '{print $4}') | |
| if [[ ${OS_VERSION} != "7.6.1810" ]]; then | |
| warn "本脚本仅在CentOS 7.6.1810测试过,当前系统版本:${OS_VERSION}" | |
| fi | |
| read -p "[确认]请确认你的网卡IP[$IP_ADDR]是否正确[Y,n]>" choice | |
| case $choice in | |
| n|N) | |
| while true; do | |
| read -p "[确认]请输入你的网卡IP→" ipaddr | |
| echo ${ipaddr} | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[1-2]\{0,1\}[0-9]\{1,2\}$' &> /dev/null | |
| if [[ $? -eq 0 ]]; then | |
| IP_ADDR=ipaddr | |
| break | |
| else | |
| error "IP输入错误" | |
| fi | |
| done | |
| ;; | |
| *) | |
| echo | |
| ;; | |
| esac | |
| # 1、关闭防火墙 | |
| info "关闭防火墙" | |
| systemctl stop firewalld.service | |
| systemctl disable firewalld.service &> /dev/null | |
| echo -ne "\b\bOK" | |
| # 2、关闭selinux | |
| info "关闭selinux" | |
| setenforce 0 | |
| sed -i "s@SELINUX=.*@SELINUX=disabled@g" /etc/selinux/config | |
| echo -ne "\b\bOK" | |
| # 3、参数修改 | |
| info "调整参数" | |
| backupfile /etc/sysctl.conf | |
| SYSCTLCONF="fs.aio-max-nr=1048576\nfs.file-max=6815744\nkernel.shmall=2097152\nkernel.shmmax=4294967296\nkernel.shmmni=4096\nkernel.sem=250 32000 100 128\nnet.ipv4.ip_local_port_range=9000 65500\nnet.core.rmem_default=262144\nnet.core.rmem_max=4194304\nnet.core.wmem_default=262144\nnet.core.wmem_max=1048576" | |
| echo -e ${SYSCTLCONF} | awk -F= '{print $1}' | while read key; | |
| do | |
| line="$(echo -e ${SYSCTLCONF} | grep ${key})" | |
| grep "${key}" /etc/sysctl.conf &> /dev/null | |
| if [[ $? -ne 0 ]]; then | |
| echo "${line}" >> /etc/sysctl.conf | |
| else | |
| sed -i "s#^${key}.*#${line}#g" /etc/sysctl.conf | |
| fi | |
| done | |
| sysctl -p &> /dev/null | |
| echo -ne "\b\bOK" | |
| # 4、修改hosts | |
| info "修改hosts" | |
| HOSTSLINE=$(grep $IP_ADDR /etc/hosts) | |
| if [[ -z $HOSTSLINE ]]; then | |
| echo "$IP_ADDR $HOSTNAME" >> /etc/hosts | |
| else | |
| echo $HOSTSLINE | grep $HOSTNAME &> /dev/null | |
| if [[ $? -ne 0 ]];then | |
| sed -i "s#${HOSTSLINE}#${HOSTSLINE} $HOSTNAME#" /etc/hosts | |
| fi | |
| fi | |
| echo -ne "\b\bOK" | |
| # 5、安装依赖包 | |
| info "安装依赖包" | |
| yum --disablerepo=\* --enablerepo=c7-media -y install binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33*i686 compat-libstdc++-33 compat-libstdc++-33*.devel gcc gcc-c++ glibc glibc*.i686 glibc-devel glibc-devel*.i686 ksh libaio libaio*.i686 libaio-devel libaio-devel*.devel libgcc libgcc*.i686 libstdc++ libstdc++*.i686 libstdc++-devel libstdc++-devel*.devel libXi libXi*.i686 libXtst libXtst*.i686 make sysstat unixODBC unixODBC*.i686 unixODBC-devel unixODBC-devel*.i686 &> /dev/null | |
| for package in binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel | |
| do | |
| rpm -q $package &> /dev/null | |
| if [[ $? -ne 0 ]]; then | |
| error "$package 未安装,请先安装 $package 。" | |
| exit 1 | |
| fi | |
| done | |
| # 6、修改用户限制 | |
| info "修改用户限制" | |
| # 6.1 /etc/security/limits.conf | |
| backupfile /etc/security/limits.conf | |
| sed -i "s@^# End of file@@g" /etc/security/limits.conf | |
| sed -i "s#oracle\s*soft\s*nproc.*##g" /etc/security/limits.conf | |
| echo "oracle soft nproc 2047" >> /etc/security/limits.conf | |
| sed -i "s#oracle\s*hard\s*nproc.*##g" /etc/security/limits.conf | |
| echo "oracle hard nproc 16384" >> /etc/security/limits.conf | |
| sed -i "s#oracle\s*soft\s*nofile.*##g" /etc/security/limits.conf | |
| echo "oracle soft nofile 1024" >> /etc/security/limits.conf | |
| sed -i "s#oracle\s*hard\s*nofile.*##g" /etc/security/limits.conf | |
| echo "oracle hard nofile 65536" >> /etc/security/limits.conf | |
| sed -i "s#oracle\s*soft\s*stack.*##g" /etc/security/limits.conf | |
| echo "oracle soft stack 10240" >> /etc/security/limits.conf | |
| sed -i "s#oracle\s*hard\s*stack.*##g" /etc/security/limits.conf | |
| echo "oracle hard stack 10240" >> /etc/security/limits.conf | |
| echo "# End of file" >> /etc/security/limits.conf | |
| # 6.2 /etc/pam.d/login | |
| backupfile /etc/pam.d/login | |
| grep "^[^#]\s*session\s*required\s*/lib64/security/pam_limits.so" /etc/pam.d/login > /dev/null | |
| if [[ $? -ne 0 ]]; then | |
| echo session required /lib64/security/pam_limits.so >> /etc/pam.d/login | |
| fi | |
| grep "^[^#]\s*session\s*required\s*pam_limits.so" /etc/pam.d/login > /dev/null | |
| if [[ $? -ne 0 ]]; then | |
| echo session required pam_limits.so >> /etc/pam.d/login | |
| fi | |
| # 6.3 /etc/profile | |
| cat > /etc/oraprofile<<EOF | |
| if [ $USER = "oracle" ]; then | |
| if [ $SHELL = "/bin/ksh" ]; then | |
| ulimit -p 16384 | |
| ulimit -n 65536 | |
| else | |
| ulimit -u 16384 -n 65536 | |
| fi | |
| fi | |
| EOF | |
| grep "\. /etc/oraprofile" /etc/profile > /dev/null | |
| if [[ $? -ne 0 ]]; then | |
| echo ". /etc/oraprofile" >> /etc/profile | |
| fi | |
| source /etc/oraprofile | |
| echo -ne "\b\bOK" | |
| # 7、新建用户 | |
| info "新建用户" | |
| groupadd oinstall | |
| groupadd dba | |
| useradd -g oinstall -G dba oracle | |
| echo oracle | passwd --stdin oracle &> /dev/null | |
| # 8、新建目录 | |
| info "新建目录" | |
| BASE_PATH=${BASE_PATH/%\//} | |
| mkdir -p ${BASE_PATH} | |
| chown -R oracle:oinstall ${BASE_PATH} | |
| chmod -R 775 ${BASE_PATH} | |
| mkdir -p ${WORKING_DIR}/response/ | |
| echo -ne "\b\bOK" | |
| # 9、配置oracle用户环境变量 | |
| info "配置oracle用户环境变量" | |
| ORACLE_USER_ROOT="$( getUserRoot oracle )" | |
| ORACLE_USER_ROOT=${ORACLE_USER_ROOT/%\//} | |
| cat > ${ORACLE_USER_ROOT}/.oracleprofile<<EOF | |
| export ORACLE_BASE=${BASE_PATH}/oracle | |
| export ORACLE_SID=${ORACLE_SID} | |
| export ORACLE_HOME=\${ORACLE_BASE}/product/db_${DB_VERSION} | |
| export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/usr/lib | |
| export PATH=\${PATH}:\${ORACLE_HOME}/bin | |
| EOF | |
| chown oracle.oinstall ${ORACLE_USER_ROOT}/.oracleprofile | |
| [[ ! -f ${ORACLE_USER_ROOT}/.bash_profile ]] && { | |
| touch ${ORACLE_USER_ROOT}/.bash_profile | |
| chown oracle.oinstall ${ORACLE_USER_ROOT}/.bash_profile | |
| } | |
| grep "\. ~/.oracleprofile" ${ORACLE_USER_ROOT}/.bash_profile > /dev/null | |
| if [[ $? -ne 0 ]]; then | |
| echo ". ~/.oracleprofile" >> ${ORACLE_USER_ROOT}/.bash_profile | |
| fi | |
| echo -ne "\b\bOK" | |
| # 10、安装数据库软件 | |
| info "安装数据库软件,请稍后" | |
| chown -R oracle.oinstall ${WORKING_DIR} | |
| rm -rf ${BASE_PATH}/oraInventory | |
| MEM_TOTAL=$(expr $(cat /proc/meminfo | grep MemTotal | awk '{print $2}') / 1024) | |
| MEM_ORACLE=$(expr $(expr ${MEM_TOTAL} \* 4) / 10) | |
| su - oracle <<EOF | |
| cd ${WORKING_DIR} | |
| ./runInstaller -silent -force -noconfig -IgnoreSysPreReqs -ignorePrereq -showProgress \ | |
| oracle.install.option=INSTALL_DB_SWONLY \ | |
| UNIX_GROUP_NAME=oinstall \ | |
| INVENTORY_LOCATION=${BASE_PATH}/oraInventory \ | |
| SELECTED_LANGUAGES=en,zh_CN \ | |
| ORACLE_BASE=${BASE_PATH}/oracle \ | |
| ORACLE_HOME=${BASE_PATH}/oracle/product/db_${DB_VERSION} \ | |
| oracle.install.db.InstallEdition=EE \ | |
| oracle.install.db.DBA_GROUP=dba \ | |
| oracle.install.db.OPER_GROUP=oinstall \ | |
| oracle.install.db.BACKUPDBA_GROUP=dba \ | |
| oracle.install.db.DGDBA_GROUP=dba \ | |
| oracle.install.db.KMDBA_GROUP=dba \ | |
| oracle.install.db.OSRACDBA_GROUP=dba \ | |
| oracle.install.db.config.starterdb.memoryLimit=${MEM_ORACLE} \ | |
| SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \ | |
| DECLINE_SECURITY_UPDATES=true | |
| EOF | |
| for i in `seq -w ${INSTALL_DELAY} -1 1` | |
| do | |
| echo -ne "\b\b\b$i"; | |
| sleep 1; | |
| done | |
| echo -ne "\b\b\b OK" | |
| info "正在执行orainstRoot.sh,请稍后" | |
| ${BASE_PATH}/oraInventory/orainstRoot.sh &> /dev/null | |
| echo -ne "\b\b\b OK" | |
| info "正在执行root.sh,请稍后" | |
| ${BASE_PATH}/oracle/product/db_${DB_VERSION}/root.sh &> /dev/null | |
| echo -ne "\b\b\b OK" | |
| # 11、安装Oracle服务 | |
| info "安装Oracle服务" | |
| cat > /etc/init.d/oracle<<EOF | |
| #!/bin/bash | |
| # oracle: Start/Stop Oracle Database 12c R2 | |
| # chkconfig: 345 90 10 | |
| # description: The Oracle Database is an Object-Relational Database Management System. | |
| # | |
| . /etc/rc.d/init.d/functions | |
| LOCKFILE=/var/lock/subsys/oracle | |
| ORACLE_HOME=${BASE_PATH}/oracle/product/db_${DB_VERSION} | |
| ORACLE_USER=oracle | |
| case "\$1" in | |
| 'start') | |
| if [ -f \$LOCKFILE ]; then | |
| echo \$0 already running. | |
| exit 1 | |
| fi | |
| echo -n \$"Starting Oracle Database:" | |
| su - \$ORACLE_USER -c "\$ORACLE_HOME/bin/lsnrctl start" | |
| su - \$ORACLE_USER -c "\$ORACLE_HOME/bin/dbstart \$ORACLE_HOME" | |
| touch \$LOCKFILE | |
| ;; | |
| 'stop') | |
| if [ ! -f \$LOCKFILE ]; then | |
| echo \$0 already stopping. | |
| exit 1 | |
| fi | |
| echo -n \$"Stopping Oracle Database:" | |
| su - \$ORACLE_USER -c "\$ORACLE_HOME/bin/lsnrctl stop" | |
| su - \$ORACLE_USER -c "\$ORACLE_HOME/bin/dbshut" | |
| rm -f \$LOCKFILE | |
| ;; | |
| 'restart') | |
| \$0 stop | |
| \$0 start | |
| ;; | |
| 'status') | |
| if [ -f \$LOCKFILE ]; then | |
| echo \$0 started. | |
| else | |
| echo \$0 stopped. | |
| fi | |
| ;; | |
| *) | |
| echo "Usage: \$0 [start|stop|status]" | |
| exit 1 | |
| esac | |
| exit 0 | |
| EOF | |
| chmod +x /etc/init.d/oracle | |
| systemctl daemon-reload | |
| if [[ ${AUTO_START} == "true" ]]; then | |
| systemctl enable oracle &> /dev/null | |
| fi | |
| echo -ne "\b\b\b OK" | |
| # 12、建立监听 | |
| info "建立监听" | |
| su - oracle -c "${BASE_PATH}/oracle/product/db_${DB_VERSION}/bin/netca -silent -responsefile ${WORKING_DIR}/response/netca.rsp" &> /dev/null | |
| if [[ $? -ne 0 ]]; then | |
| echo -ne "\b\b\b\b\b\b" && echo -e "\e[31mFailed\e[0m" | |
| else | |
| echo -ne "\b\b\b OK" | |
| fi | |
| # 13、建库 | |
| info "创建数据库" | |
| cat > ${WORKING_DIR}/response/sg_dbca.rsp<<EOF | |
| gdbName=${ORACLE_SID} | |
| sid=${ORACLE_SID} | |
| databaseConfigType=SI | |
| createAsContainerDatabase=${PDB_ENABLE} | |
| numberOfPDBs=${PDB_INSTANCE} | |
| pdbName=${PDB_NAME} | |
| pdbAdminPassword=oracle | |
| useLocalUndoForPDBs=true | |
| templateName=General_Purpose.dbc | |
| sysPassword=oracle | |
| systemPassword=oracle | |
| emConfiguration=DBEXPRESS | |
| emExpressPort=5500 | |
| runCVUChecks=false | |
| storageType=FS | |
| characterSet=${CREATEDB_CHAR} | |
| listeners=LISTENER | |
| EOF | |
| chown oracle.oinstall ${WORKING_DIR}/response/sg_dbca.rsp | |
| su - oracle <<EOF | |
| ${BASE_PATH}/oracle/product/db_${DB_VERSION}/bin/dbca -silent -createDatabase -ignorePreReqs -responsefile ${WORKING_DIR}/response/sg_dbca.rsp | |
| EOF | |
| echo -ne "\b\b\b OK" | |
| if [[ ${AUTO_START}} == "true" ]]; then | |
| info "设置示例随服务启动" | |
| SIDLINE=$(grep "^${ORACLE_SID}" /etc/oratab) | |
| AFTLINE=$(echo "$SIDLINE" | sed "s/:N$/:Y/") | |
| sed -i "s#${SIDLINE}#${AFTLINE}#" /etc/oratab | |
| systemctl enable oracle | |
| echo -ne "\b\b\b OK" | |
| fi | |
| set +ex |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment