主頁 > 資料庫 > ORACLE一鍵安裝單機11G/12C/18C/19C并建庫腳本(shell)

ORACLE一鍵安裝單機11G/12C/18C/19C并建庫腳本(shell)

2021-04-08 12:23:30 資料庫

廢話不多說,直接上腳本:

--增加了18c,19c RU補丁安裝選項,

touch AllOracleSilent.sh(:set fileformat=unix)

#!/bin/bash
echo "####################################################################################"
echo "##Author 	: LuciferLiu"
echo "##Blog   	: https://blog.csdn.net/m0_50546016"
echo "##Version	: 2.0"
echo "##Function: Oracle 11g/12c/18c/19c install on Linux 6/7"
echo "####################################################################################"
echo "#執行腳本前:"
echo "#    1. 把腳本放入軟體目錄,例如:/soft"
echo "#    2. 掛載ISO"
echo "#    3. 把需要本地安裝的rpm和software上傳到軟體目錄"
echo "#    4. 設定好主機IP"
echo "####################################################################################"
####################################################################################
# Parameters For Install
####################################################################################
PUBLICIP=
HOSTNAME=orcl
ORACLE_SID=orcl
ISCDB=FALSE
PDBNAME=pdb01
SOFTWAREDIR=$(pwd)
DAYTIME=$(date +%Y%m%d)
DB_VERSION=
RELS=$(more /etc/system-release)
OS_VER_PRI=$(echo ${RELS#*release} | awk '{print $1}' | cut -f 1 -d '.')
ORAPASSWD=oracle
ENV_BASE_DIR=/u01/app
ORADATADIR=/oradata
ARCHIVEDIR=/archivelog
BACKUPDIR=/backup
SCRIPTSDIR=/home/oracle/scripts
CHARACTERSET=AL32UTF8
ONLYCONFIGOS=N
ONLYINSTALLSOFTWARE=N
REMOVEINSTANCE=
REMOVEDBSOFTWARE=
RU=
####################################################################################
####################################################################################
##The following is a custom function:
####################################################################################
#Add colors to fonts through variables
#Define a c1() function here, if you want to change the font color later, you can call it directly
c1() {
    RED_COLOR='\E[1;31m'
    GREEN_COLOR='\E[1;32m'
    YELLOW_COLOR='\E[1;33m'
    BLUE_COLOR='\E[1;34m'
    PINK_COLOR='\E[1;35m'
    WHITE_BLUE='\E[47;34m'
    DOWN_BLUE='\E[4;36m'
    FLASH_RED='\E[5;31m'
    RES='\E[0m'

    #Here it is judged whether the incoming parameters are not equal to 2, if not equal to 2, prompt and exit
    if [ $# -ne 2 ]; then
        echo "Usage $0 content {red|yellow|blue|green|pink|wb|db|fr}"
        exit
    fi

    case "$2" in
    red | RED)
        echo -e "${RED_COLOR}$1${RES}"
        ;;
    yellow | YELLOW)
        echo -e "${YELLOW_COLOR}$1${RES}"
        ;;
    green | GREEN)
        echo -e "${GREEN_COLOR}$1${RES}"
        ;;
    blue | BLUE)
        echo -e "${BLUE_COLOR}$1${RES}"
        ;;
    pink | PINK)
        echo -e "${PINK_COLOR}$1${RES}"
        ;;
    wb | WB)
        echo -e "${WHITE_BLUE}$1${RES}"
        ;;
    db | DB)
        echo -e "${DOWN_BLUE}$1${RES}"
        ;;
    fr | FR)
        echo -e "${FLASH_RED}$1${RES}"
        ;;
    *)
        echo -e "Please enter the specified color code:{red|yellow|blue|green|pink|wb|db|fr}"
        ;;
    esac
}

##Example
##c1 "Program installation error!" red
##c1 "The program is successfully installed!" green
##c1 "Output related annotation information" blue

help() {
    c1 "Desc: For ALL Oracle Silent Install" green
    echo
    c1 "Usage: AllOracleSilent [OPTIONS] OBJECT { COMMAND | help }" green
    echo
    c1 "Excute: " green
    c1 "1.chmod 777 AllOracleSilent.sh" green
    echo
    c1 "2.How to Excute the script:" green
    c1 "./AllOracleSilent.sh -i 192.168.56.120 -d 11g" blue
    c1 "or" green
    c1 "./AllOracleSilent.sh -i 192.168.56.120 -n orcl -o orcl -c TRUE -pb pdb01 -d 12c -p oracle -b /u01/app -s AL32UTF8 -m N -w N" blue
    echo
    c1 "3.How to Remove Instance:" green
    c1 "./AllOracleSilent.sh -ri orcl" blue
    echo
    c1 "4.How to Remove Database Software:" green
    c1 "./AllOracleSilent.sh -rd /u01/app/oracle/product/19.0.0/db" blue
    echo
    c1 "OPTIONS: " green
    c1 "-i,		--PUBLICIP			PUBLICIP NETWORK ADDRESS" green
    c1 "-n,		--HOSTNAME			HOSTNAME(orcl)" green
    c1 "-o,		--ORACLE_SID			ORACLE_SID(orcl)" green
    c1 "-c,		--ISCDB				IS CDB OR NOT(TRUE|FALSE)" green
    c1 "-pb,		--PDBNAME			PDBNAME(pdb01)" green
    c1 "-d,		--DB_VERSION			ORALCE DATABASE VERSION(11g|12c|18c|19c)" green
    c1 "-p,		--ORAPASSWD			ORACLE USER PASSWORD(oracle)" green
    c1 "-b,		--ENV_BASE_DIR			ORACLE BASE DIR(/u01/app)" green
    c1 "-s,		--CHARACTERSET			ORACLE CHARACTERSET(ZHS16GBK|AL32UTF8)" green
    c1 "-m,		--ONLYCONFIGOS			ONLY CONFIG SYSTEM PARAMETER(Y|N)" green
    c1 "-w,		--ONLYINSTALLSOFTWARE 		ONLY INSTALL ORACLE SOFTWARE(Y|N)" green
    c1 "-ri,		--REMOVEINSTANCE		REMOVE ORACLE INSTANCE(orcl)" green
    c1 "-rd,		--REMOVEDBSOFTWARE		REMOVE ORACLE SOFTWARE(/u01/app/oracle/product/11.2.0/db)" green
    c1 "-ru,		--RELEASE UPDATE		DATABASE RELEASE UPDATE(32072711)" green
    exit 0
}

echo
while [ -n "$1" ]; do #Here by judging whether $1 exists
    case $1 in
    -i | --PUBLICIP)
        PUBLICIP=$2 #$2 Is the parameter we want to output
        shift 2
        ;; # Move the parameter back by 2 and enter the judgment of the next parameter
    -n | --HOSTNAME)
        HOSTNAME=$2
        shift 2
        ;;
    -o | --ORACLE_SID)
        ORACLE_SID=$2
        shift 2
        ;;
    -c | --ISCDB)
        ISCDB=$2
        shift 2
        ;;
    -pb | --PDBNAME)
        PDBNAME=$2
        shift 2
        ;;
    -d | --DB_VERSION)
        DB_VERSION=$2
        shift 2
        ;;
    -p | --ORAPASSWD)
        ORAPASSWD=$2
        shift 2
        ;;
    -b | --ENV_BASE_DIR)
        ENV_BASE_DIR=$2
        shift 2
        ;;
    -s | --CHARACTERSET)
        CHARACTERSET=$2
        shift 2
        ;;
    -m | --ONLYCONFIGOS)
        ONLYCONFIGOS=$2
        shift 2
        ;;
    -w | --ONLYINSTALLSOFTWARE)
        ONLYINSTALLSOFTWARE=$2
        shift 2
        ;;
    -ri | --REMOVEINSTANCE)
        REMOVEINSTANCE=$2
        shift 2
        ;;
    -rd | --REMOVEDBSOFTWARE)
        REMOVEDBSOFTWARE=$2
        shift 2
        ;;
    -ru | --RU)
        RU=$2
        shift 2
        ;;
    -h | --help) help ;; # function help is called
    --)
        shift
        break
        ;; # end of options
    -*)
        echo "Error: Option '$1' is unknown, try './AllOracleSilent.sh --help'."
        exit 1
        ;;
    *) break ;;
    esac
done

##Judge whether user is root, if it is not, exit
if [ $USER != "root" ]; then
    echo
    c1 "The user must be root,and now you user is $USER,please su to root." red
    exit 1
fi

##Judge whether ip or dbversion is empty, if it is empty, exit
if [ -z "${REMOVEINSTANCE}" ] && [ -z "${REMOVEDBSOFTWARE}" ]; then
    if [ -z "${PUBLICIP}" ] || [ -z "${DB_VERSION}" ]; then
        echo
        c1 "PUBLICIP and DB_VERSION is a required parameter, try'./AllOracleSilent.sh --help' to execute the script" red
        echo
        exit
    fi
    ####################################################################################
    # ORACLE SID
    ####################################################################################
    if [ -f /home/oracle/.bash_profile ] && [ $(egrep "#OraConfBegin" /home/oracle/.bash_profile | wc -l) -ne 0 ]; then
        oracleSid=$(grep "ORACLE_SID=" /home/oracle/.bash_profile | awk '{print $2}')
        oracleSid=$(echo ${oracleSid#*=})
        oracleHostname=$(grep "ORACLE_HOSTNAME=" /home/oracle/.bash_profile | awk '{print $2}')
        oracleHostname=$(echo ${oracleHostname#*=})
        oracleBase=$(grep "ORACLE_BASE=" /home/oracle/.bash_profile | awk '{print $2}')
        oracleBase=$(echo ${oracleBase#*=})
        oracleHome=$(grep "ORACLE_HOME=" /home/oracle/.bash_profile | awk '{print $2}')
        oracleHome=$(echo ${oracleHome#*=})
    fi

    if [ -f /etc/oratab ] && [ $(egrep "${ORACLE_SID}" /etc/oratab | wc -l) -ne 0 ]; then
        if [ "${oracleSid}" = "${ORACLE_SID}" ]; then
            echo
            c1 "ORACLE_SID:${oracleSid}" blue
            echo
            c1 "Specified SID Name (${oracleSid}) already exists, Specify a different SID Name that does not already exist OR :" red
            echo
            c1 "./AllOracleSilent -ri ${oracleSid} to remove it" blue
            echo
            exit 99
        fi
    fi

fi

####################################################################################
## Remove Instance && database
####################################################################################
##Judge whether OracleSID is empty, if it is empty ,exit
REMOVEINSTANCE() {
    su - oracle -c "dbca -silent -deleteDatabase -sourceDB ${REMOVEINSTANCE}"
    if [ $? -ne 0 ]; then
        c1 "You need to install Oracle Database Software First." red
        oracleHOme=$(grep "ORACLE_HOME=" /home/oracle/.bash_profile | awk '{print $2}')
        oracleHOme=$(echo ${oracleHOme#*=})
        rm -rf ${oracleHOme}
        exit 99
    fi
    exit 99
}

##Judge whether OracleHome is empty, if it is empty ,exit
REMOVEDBSOFTWARE() {
    if [ ! -d "${REMOVEDBSOFTWARE}" ]; then
        c1 "What You Input OracleHome (${REMOVEDBSOFTWARE}) is not exist, exit" red
        exit 99
    else
        su - oracle -c "${REMOVEDBSOFTWARE}/deinstall/deinstall -local -o ${REMOVEDBSOFTWARE}"
        if [ $? -ne 0 ]; then
            c1 "You need to install Oracle Database Software First." red
            rm -rf ${REMOVEDBSOFTWARE}
        fi
        rm -rf /etc/oraInst.loc
        rm -rf /opt/ORCLfmap
        rm -rf /etc/oratab
        exit 99
    fi
}

####################################################################################
## Log Write
####################################################################################
rm -rf ${SOFTWAREDIR}/oracleAllSilent_*.log

oracl19clog=${SOFTWAREDIR}/oracleAllSilent_$(date +"20%y%m%d%H%M%S").log

logwrite() {
    echo $(c1 "####################################################################################" green) >>${oracl19clog}
    echo $(echo) >>${oracl19clog}
    echo $(c1 "# $1" blue) >>${oracl19clog}
    echo $(echo) >>${oracl19clog}
    echo $(c1 "####################################################################################" green) >>${oracl19clog}
    echo $(echo) >>${oracl19clog}
    echo "$1 :" >>${oracl19clog}
    echo $(echo) >>${oracl19clog}
    echo "$2" >${SOFTWAREDIR}/ex.sh
    chmod +x ${SOFTWAREDIR}/ex.sh
    echo "$(${SOFTWAREDIR}/ex.sh)" >>${oracl19clog}
    rm -rf ${SOFTWAREDIR}/ex.sh
    echo $(echo) >>${oracl19clog}
}

##Example
##logwrite "HostName" "hostname"
##logwrite "Firewalld" "systemctl status firewalld"

echo $(c1 "####################################################################################" green) >>${oracl19clog}
echo $(echo) >>${oracl19clog}
echo $(c1 "# Installation Logging" wb) >>${oracl19clog}
echo $(echo) >>${oracl19clog}
echo $(c1 "####################################################################################" green) >>${oracl19clog}
echo $(echo) >>${oracl19clog}
echo $(echo) >>${oracl19clog}

####################################################################################
# OS Version
####################################################################################
if [ $OS_VER_PRI -eq 7 ]; then
    OS_VERSION=linux7
elif [ $OS_VER_PRI -eq 6 ]; then
    OS_VERSION=linux6
else
    c1 "sorry, this operating system is not supported!!!" red
    exit
fi

logwrite "OS Version" "more /etc/system-release"

####################################################################################
# Choice DB Version
####################################################################################
if [[ -z "${DB_VERSION}" ]] || [[ "${DB_VERSION}" = "19c" ]] || [[ "${DB_VERSION}" = "19C" ]] || [[ "${DB_VERSION}" = "19" ]]; then
    DB_VERSION=19.3.0.0
elif [[ "${DB_VERSION}" = "18c" ]] || [[ "${DB_VERSION}" = "18C" ]] || [[ "${DB_VERSION}" = "18" ]]; then
    DB_VERSION=18.0.0.0
elif [[ "${DB_VERSION}" = "12c" ]] || [[ "${DB_VERSION}" = "12C" ]] || [[ "${DB_VERSION}" = "12" ]]; then
    DB_VERSION=12.2.0.1
elif [[ "${DB_VERSION}" = "11g" ]] || [[ "${DB_VERSION}" = "11G" ]] || [[ "${DB_VERSION}" = "11" ]]; then
    DB_VERSION=11.2.0.4
else
    c1 "DB version is a required parameter!!! Try'./AllOracleSilent.sh --help' to execute the script" red
    exit
fi

logwrite "DB Version" "echo ${DB_VERSION}"

####################################################################################
# Choice DB HOME
####################################################################################
ENV_ORACLE_BASE=$ENV_BASE_DIR/oracle
ENV_ORACLE_INVEN=$ENV_BASE_DIR/oraInventory
if [ "${DB_VERSION}" = "11.2.0.4" ]; then
    ENV_ORACLE_HOME=$ENV_ORACLE_BASE/product/11.2.0/db
elif [ "${DB_VERSION}" = "12.2.0.1" ]; then
    ENV_ORACLE_HOME=$ENV_ORACLE_BASE/product/12.2.0/db
elif [ "${DB_VERSION}" = "18.0.0.0" ]; then
    ENV_ORACLE_HOME=$ENV_ORACLE_BASE/product/18.0.0/db
elif [ "${DB_VERSION}" = "19.3.0.0" ]; then
    ENV_ORACLE_HOME=$ENV_ORACLE_BASE/product/19.3.0/db
else
    c1 "Error database version! please check again!" red
    exit
fi

if [[ -d ${ENV_ORACLE_HOME} ]] && [[ "$(ls -A ${ENV_ORACLE_HOME})" != "" ]]; then
    c1 "ORACLE_HOME is not empty.Try ./AllOracleSilent -rd ${ENV_ORACLE_HOME} to remove it" red
    exit 99
fi

logwrite "DB HOME" "echo ${ENV_ORACLE_HOME}"

####################################################################################
# Configure hostname
####################################################################################
SetHostName() {
    if [ "${OS_VERSION}" = "linux6" ]; then
        hostname=$(egrep "HOSTNAME=" /etc/sysconfig/network)
        if [[ $(egrep "${HOSTNAME}" /etc/sysconfig/network) != "${HOSTNAME}" ]]; then
            /bin/hostname $HOSTNAME
            sed -i "s/${hostname}/HOSTNAME=${HOSTNAME}/" /etc/sysconfig/network
        fi
    elif [ "${OS_VERSION}" = "linux7" ]; then
        if [[ $(egrep "${HOSTNAME}" /etc/hostname) != "${HOSTNAME}" ]]; then
            /usr/bin/hostnamectl set-hostname $HOSTNAME
        fi
    fi
}

logwrite "HOSTNAME" "echo ${HOSTNAME}"

####################################################################################
# Configure /etc/hosts
####################################################################################
SetHosts() {
    if [[ $(egrep "${HOSTNAME}" /etc/hosts) != "${HOSTNAME}" ]] || [[ $(egrep "${PUBLICIP}" /etc/hosts) != "${PUBLICIP}" ]]; then
        [ ! -f /etc/hosts.${DAYTIME} ] && cp /etc/hosts /etc/hosts.${DAYTIME}
        cat <<EOF >/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

#Public IP
$PUBLICIP	$HOSTNAME
EOF
    fi
}

logwrite "/etc/hosts" "su -c \"cat /etc/hosts\""

####################################################################################
#install rpm that oracle is necessary for installing
####################################################################################
InstallRPM() {
    ####################################################################################
    # Judge ISO file mount status
    ####################################################################################
    mountPatch=$(mount | egrep "iso|ISO" | awk '{print $3}')
    if [ ! "${mountPatch}" ]; then
        echo
        c1 "The ISO file is not mounted on system." red
        exit 99
    else
        if [ $(egrep "#OraConfBegin" /etc/yum.repos.d/local.repo | wc -l) -eq 0 ]; then
            [ ! -f /etc/yum.repos.d/local.repo.${DAYTIME} ] && cp /etc/yum.repos.d/local.repo /etc/yum.repos.d/local.repo.${DAYTIME}
            echo "#OraConfBegin" >>/etc/yum.repos.d/local.repo
            echo "[server]" >>/etc/yum.repos.d/local.repo
            echo "name=server" >>/etc/yum.repos.d/local.repo
            echo "baseurl=file://"${mountPatch} >>/etc/yum.repos.d/local.repo
            echo "enabled=1" >>/etc/yum.repos.d/local.repo
            echo "gpgcheck=1" >>/etc/yum.repos.d/local.repo
            rpm --import ${mountPatch}/RPM-GPG-KEY-redhat-release
        fi
        if [ "${OS_VERSION}" = "linux6" ]; then
            if [ $(rpm -q bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ elfutils-libelf elfutils-libelf-devel glibc glibc-devel libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXrender make net-tools smartmontools sysstat e2fsprogs e2fsprogs-libs expect unzip openssh-clients readline psmisc --qf '%{name}.%{arch}\n' | grep "not installed" | wc -l) -gt 0 ]; then
                yum install -y bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ elfutils-libelf elfutils-libelf-devel glibc glibc-devel libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXrender make net-tools smartmontools sysstat e2fsprogs e2fsprogs-libs expect unzip openssh-clients readline* psmisc
            fi
        elif [ "${OS_VERSION}" = "linux7" ]; then
            if [ $(rpm -q bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ elfutils-libelf elfutils-libelf-devel glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXtst libXrender libXrender-devel make net-tools nfs-utils smartmontools sysstat e2fsprogs e2fsprogs-libs fontconfig-devel expect unzip openssh-clients readline psmisc --qf '%{name}.%{arch}\n' | grep "not installed" | wc -l) -gt 0 ]; then
                yum install -y bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ elfutils-libelf elfutils-libelf-devel glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXtst libXrender libXrender-devel make net-tools nfs-utils smartmontools sysstat e2fsprogs e2fsprogs-libs fontconfig-devel expect unzip openssh-clients readline* psmisc
            fi
        fi

    fi

    if [ "${OS_VERSION}" = "linux6" ]; then
        logwrite "RPM Check" "rpm -q bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ elfutils-libelf elfutils-libelf-devel glibc glibc-devel libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXrender make net-tools smartmontools sysstat e2fsprogs e2fsprogs-libs expect unzip openssh-clients readline"
    elif [ "${OS_VERSION}" = "linux7" ]; then
        logwrite "RPM Check" "rpm -q bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ elfutils-libelf elfutils-libelf-devel glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXtst libXrender libXrender-devel make net-tools nfs-utils smartmontools sysstat e2fsprogs e2fsprogs-libs fontconfig-devel expect unzip openssh-clients readline"
    fi
}

####################################################################################
# create user and groups
####################################################################################
CreateUsersAndDirs() {
    ####################################################################################
    # create user and groups
    ####################################################################################
    if [ $(egrep "oinstall" /etc/group | wc -l) -eq 0 ]; then
        /usr/sbin/groupadd -g 54321 oinstall
    fi
    if [ $(egrep "dba" /etc/group | wc -l) -eq 0 ]; then
        /usr/sbin/groupadd -g 54322 dba
    fi
    if [ $(egrep "oper" /etc/group | wc -l) -eq 0 ]; then
        /usr/sbin/groupadd -g 54323 oper
    fi
    if [[ "${DB_VERSION}" = "19.3.0.0" ]] || [[ "${DB_VERSION}" = "18.0.0.0" ]] || [[ "${DB_VERSION}" = "12.2.0.1" ]]; then
        if [ $(egrep "backupdba" /etc/group | wc -l) -eq 0 ]; then
            /usr/sbin/groupadd -g 54324 backupdba
        fi
        if [ $(egrep "dgdba" /etc/group | wc -l) -eq 0 ]; then
            /usr/sbin/groupadd -g 54325 dgdba
        fi
        if [ $(egrep "kmdba" /etc/group | wc -l) -eq 0 ]; then
            /usr/sbin/groupadd -g 54326 kmdba
        fi
        if [ $(egrep "racdba" /etc/group | wc -l) -eq 0 ]; then
            /usr/sbin/groupadd -g 54330 racdba
        fi
    fi

    ##Create user
    if [ $(egrep "oracle" /etc/passwd | wc -l) -eq 0 ]; then
        if [[ "${DB_VERSION}" = "19.3.0.0" ]] || [[ "${DB_VERSION}" = "18.0.0.0" ]] || [[ "${DB_VERSION}" = "12.2.0.1" ]]; then
            /usr/sbin/useradd -u 54321 -g oinstall -G dba,backupdba,dgdba,kmdba,racdba,oper oracle
        elif [ "${DB_VERSION}" = "11.2.0.4" ]; then
            /usr/sbin/useradd -u 54321 -g oinstall -G dba,oper oracle
        fi
        if [ $? -ne 0 ]; then
            echo "Command failed to adding user --oracle."
            exit 93
        fi
    else
        if [[ "${DB_VERSION}" = "19.3.0.0" ]] || [[ "${DB_VERSION}" = "18.0.0.0" ]] || [[ "${DB_VERSION}" = "12.2.0.1" ]]; then
            /usr/sbin/usermod -g oinstall -G dba,backupdba,dgdba,kmdba,racdba,oper oracle
        elif [ "${DB_VERSION}" = "11.2.0.4" ]; then
            /usr/sbin/usermod -g oinstall -G dba,oper oracle
        fi
    fi

    ##Set user oracle's password
    echo "${ORAPASSWD}" | passwd --stdin oracle
    if [ $? -ne 0 ]; then
        c1 "User oracle is not existing." red
        exit 92
    fi

    ####################################################################################
    #make directory
    ####################################################################################
    [ ! -d "${ENV_ORACLE_HOME}" ] && mkdir -p ${ENV_ORACLE_HOME}
    [ ! -d "${ENV_ORACLE_INVEN}" ] && mkdir -p ${ENV_ORACLE_INVEN}
    [ ! -d ${ORADATADIR} ] && mkdir -p ${ORADATADIR}
    [ ! -d ${ARCHIVEDIR} ] && mkdir -p ${ARCHIVEDIR}
    [ ! -d ${BACKUPDIR} ] && mkdir -p ${BACKUPDIR}
    [ ! -d ${SCRIPTSDIR} ] && mkdir -p ${SCRIPTSDIR}
    chown -R oracle:oinstall ${SCRIPTSDIR}
    chown -R oracle:oinstall ${ORADATADIR}
    chown -R oracle:oinstall ${ARCHIVEDIR}
    chown -R oracle:oinstall ${BACKUPDIR}
    chown -R oracle:oinstall ${ENV_BASE_DIR}
    chmod -R 775 ${ENV_BASE_DIR}

    if [ "${DB_VERSION}" = "12.2.0.1" ]; then
        touch /etc/oraInst.loc
        echo "inventory_loc=${ENV_ORACLE_INVEN}" >>/etc/oraInst.loc
        echo "inst_group=oinstall" >>/etc/oraInst.loc
    fi

    logwrite "Create user and groups" "id oracle"
}

####################################################################################
#Time dependent Settings
####################################################################################
TimeDepSet() {
    if [ "${OS_VERSION}" = "linux6" ]; then
        if [ $(egrep "Asia/Shanghai" /etc/sysconfig/clock | wc -l) -eq 0 ]; then
            [ ! -f /etc/sysconfig/clock.${DAYTIME} ] && cp /etc/sysconfig/clock /etc/sysconfig/clock.${DAYTIME}
            cat <<EOF >/etc/sysconfig/clock
			ZONE="Asia/Shanghai"
EOF
        fi
        if [ $(chkconfig --list | grep ntpd | grep on | wc -l) -gt 0 ]; then
            service ntpd stop
            chkconfig ntpd off
        fi
        logwrite "ntpd" "service ntpd status"
        [ -f /etc/ntp.conf ] && mv /etc/ntp.conf /etc/ntp.conf.orig
    elif [ "${OS_VERSION}" = "linux7" ]; then
        timedatectl set-timezone Asia/Shanghai
        if [ $(systemctl status chronyd | grep running | wc -l) -gt 0 ]; then
            systemctl stop chronyd.service
            systemctl disable chronyd.service
        fi
        logwrite "chronyd" "systemctl status chronyd"
    fi
    logwrite "Time dependent" "date"

}

####################################################################################
#Stop avahi deamon
####################################################################################
Disableavahi() {
    if [ "${OS_VERSION}" = "linux6" ]; then
        if [ $(chkconfig --list | grep avahi-daemon | grep '3:on' | wc -l) -gt 0 ]; then
            service avahi-daemon stop
            chkconfig avahi-daemon off
        fi
        logwrite "avahi-daemon" "service avahi-daemon  status"

    elif [ "${OS_VERSION}" = "linux7" ]; then
        if [ $(systemctl status avahi-daemon | grep running | wc -l) -gt 0 ]; then
            systemctl stop avahi-daemon.socket
            systemctl disable avahi-daemon.socket
            systemctl stop avahi-daemon.service
            systemctl disable avahi-daemon.service
            ps -ef | grep avahi-daemon | egrep -v "grep" | awk '{print "kill -9 "$2}'
        fi
        logwrite "avahi-daemon" "systemctl status avahi-daemon"
    fi
}

####################################################################################
# Stop firefall
####################################################################################
DisableFirewall() {
    if [ "${OS_VERSION}" = "linux6" ]; then
        if [ $(chkconfig --list | grep tables | grep on | wc -l) -gt 0 ]; then
            service iptables stop
            chkconfig iptables off
            service ip6tables stop
            chkconfig ip6tables off
        fi
        logwrite "Iptables" "service iptables status"
    elif [ "${OS_VERSION}" = "linux7" ]; then
        if [ $(systemctl status firewalld.service | grep running | wc -l) -gt 0 ]; then
            systemctl stop firewalld.service
            systemctl disable firewalld.service
        fi
        logwrite "Firewalld" "systemctl status firewalld"
    fi
}

####################################################################################
# Disable Selinux
####################################################################################
DisableSelinux() {
    if [ "$(/usr/sbin/getenforce)" != "Disabled" ]; then
        /usr/sbin/setenforce 0
    fi
    if [ ! -z $(grep "SELINUX=enforcing" /etc/selinux/config) ]; then
        [ ! -f /etc/selinux/config.${DAYTIME} ] && cp /etc/selinux/config /etc/selinux/config.${DAYTIME}
        sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    fi

    logwrite "SELINUX" "getenforce"
}

####################################################################################
# Disable transparent_hugepages&&numa
####################################################################################
DisableTHPAndNUMA() {
    if [ "${OS_VERSION}" = "linux6" ]; then
        if [ $(egrep "/sys/kernel/mm/transparent_hugepage/enabled" /etc/rc.d/rc.local | wc -l) -eq 0 ]; then
            cat >>/etc/rc.d/rc.local <<EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
        fi
        if [ $(egrep "numa=off" /boot/grub/grub.conf | wc -l) -eq 0 ]; then
            [ ! -f /boot/grub/grub.conf.${DAYTIME} ] && cp /boot/grub/grub.conf /boot/grub/grub.conf.${DAYTIME}
            sed -i 's/quiet/quiet numa=off/' /boot/grub/grub.conf
        fi
        logwrite "/boot/grub/grub.conf" "cat /boot/grub/grub.conf"
    elif [ "${OS_VERSION}" = "linux7" ]; then
        if [ $(egrep "transparent_hugepage=never numa=off" /etc/default/grub | wc -l) -eq 0 ]; then
            [ ! -f /etc/default/grub.${DAYTIME} ] && cp /etc/default/grub /etc/default/grub.${DAYTIME}
            sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub
            grub2-mkconfig -o /boot/grub2/grub.cfg
        fi

        logwrite "/etc/default/grub" "cat /etc/default/grub"
    fi

    logwrite "Transparent_hugepages" "cat /sys/kernel/mm/transparent_hugepage/enabled"
    logwrite "NUMA" "cat /proc/cmdline"
}

####################################################################################
# Disable NetworkManager
####################################################################################
DisableNetworkManager() {
    if [ "${OS_VERSION}" = "linux6" ]; then
        if [ $(chkconfig --list | grep NetworkManager | grep on | wc -l) -gt 0 ]; then
            service NetworkManager stop
            chkconfig NetworkManager off
            service NetworkManager off
        fi
        logwrite "NetworkManager" "service NetworkManager status"
    elif [ "${OS_VERSION}" = "linux7" ]; then
        #Turn off the NetworkManager(Linux 7)
        if [ $(systemctl status NetworkManager.service | grep running | wc -l) -gt 0 ]; then
            systemctl stop NetworkManager.service
            systemctl disable NetworkManager.service
        fi
        logwrite "NetworkManager" "systemctl status NetworkManager"
    fi
}

EditParaFiles() {
    ####################################################################################
    # Edit sysctl.conf
    ####################################################################################
    ##shmmal's Calculation formula: physical memory 8G:(8*1024*1024*1024)/4096=2097152
    ##shmmax's Calculation formula: physical memory 8G:(8/2)*1024*1024*1024 -1=4294967295
    memTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}')
    totalMemory=$(expr $memTotal / 2048)
    shmall=$(expr $memTotal / 4)
    if [ $shmall -lt 2097152 ]; then
        shmall=2097152
    fi
    shmmax=$(expr $memTotal \* 1024 - 1)
    if [ $shmmax -lt 4294967295 ]; then
        shmmax=4294967295
    fi
    if [ "${OS_VERSION}" = "linux6" ]; then
        if [ $(egrep "#OraConfBegin" /etc/sysctl.conf | wc -l) -eq 0 ]; then
            [ ! -f /etc/sysctl.conf.${DAYTIME} ] && cp /etc/sysctl.conf /etc/sysctl.conf.${DAYTIME}
            cat <<EOF >>/etc/sysctl.conf
#OraConfBegin
##shmmal's Calculation formula: physical memory 8G:(8*1024*1024*1024)/4096=2097152
##shmmax's Calculation formula: physical memory 8G:(8/2)*1024*1024*1024 -1=4294967295
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = $shmall
kernel.shmmax = $shmmax
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
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
#OraConfEnd
EOF

            sysctl -p
            logwrite "/etc/sysctl.conf" "sysctl -p"
        fi
    elif [ "${OS_VERSION}" = "linux7" ]; then
        if [ ! -f /etc/sysctl.d/97-oracledatabase-sysctl.conf ]; then
            echo "##For oracle" >>/etc/sysctl.d/97-oracledatabase-sysctl.conf
        fi
        if [ $(egrep "#OraConfBegin" /etc/sysctl.d/97-oracledatabase-sysctl.conf | wc -l) -eq 0 ]; then
            [ ! -f /etc/sysctl.d/97-oracledatabase-sysctl.conf.${DAYTIME} ] && cp /etc/sysctl.d/97-oracledatabase-sysctl.conf /etc/sysctl.d/97-oracledatabase-sysctl.conf.${DAYTIME}
            cat <<EOF >>/etc/sysctl.d/97-oracledatabase-sysctl.conf
#OraConfBegin
##shmmal's Calculation formula: physical memory 8G:(8*1024*1024*1024)/4096=2097152
##shmmax's Calculation formula: physical memory 8G:(8/2)*1024*1024*1024 -1=4294967295
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = $shmall
kernel.shmmax = $shmmax
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
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
#OraConfEnd
EOF
            /sbin/sysctl --system
            logwrite "/etc/sysctl.d/97-oracledatabase-sysctl.conf" "/sbin/sysctl --system"
        fi
    fi

    ####################################################################################
    # Edit nsysctl.conf
    ####################################################################################
    if [ $(egrep "#OraConfBegin" /etc/sysconfig/network | wc -l) -eq 0 ]; then
        [ ! -f /etc/sysconfig/network.${DAYTIME} ] && cp /etc/sysconfig/network /etc/sysconfig/network.${DAYTIME}
        echo "#OraConfBegin" >>/etc/sysconfig/network
        echo "NOZEROCONF=yes" >>/etc/sysconfig/network
        echo "#OraConfEnd" >>/etc/sysconfig/network
    fi

    logwrite "NOZEROCONF" "cat /etc/sysconfig/network"

    ####################################################################################
    # Edit limits.conf
    ####################################################################################
    if [ "${OS_VERSION}" = "linux7" ]; then
        sed -i 's/*          soft    nproc     4096/*          -       nproc     16384/g' /etc/security/limits.d/20-nproc.conf
        logwrite "/etc/security/limits.d/20-nproc.conf" "cat /etc/security/limits.d/20-nproc.conf"
    fi
    if [ $(egrep "#OraConfBegin" /etc/security/limits.conf | wc -l) -eq 0 ]; then
        [ ! -f /etc/security/limits.conf.${DAYTIME} ] && cp /etc/security/limits.conf /etc/security/limits.conf.${DAYTIME}
        cat <<EOF >>/etc/security/limits.conf
#OraConfBegin
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
oracle soft nproc 2047
oracle hard nproc 16384
#OraConfEnd
EOF
    fi

    logwrite "/etc/security/limits.conf" "cat /etc/security/limits.conf"

    ##Configure pam.d
    if [ $(egrep "#OraConfBegin" /etc/pam.d/login | wc -l) -eq 0 ]; then
        cat <<EOF >>/etc/pam.d/login
#OraConfBegin
session required pam_limits.so 
session required /lib64/security/pam_limits.so
#OraConfEnd
EOF
    fi

    logwrite "/etc/pam.d/login" "cat /etc/pam.d/login"

    ####################################################################################
    # Configure /dev/shm
    ####################################################################################
    if [ $(egrep "/dev/shm" /etc/fstab | wc -l) -eq 0 ]; then
        [ ! -f /etc/fstab.${DAYTIME} ] && cp /etc/fstab /etc/fstab.${DAYTIME}
        cat <<EOF >>/etc/fstab
	tmpfs /dev/shm tmpfs size=4G 0 0
EOF
        mount -o remount /dev/shm
    fi

    logwrite "/dev/shm" "cat /etc/fstab"
    logwrite "df -hP" "df -hP"

    ####################################################################################
    # Edit bash_profile
    ####################################################################################
    ##ORALCE:
    if [ $(egrep "#OraConfBegin" /home/oracle/.bash_profile | wc -l) -eq 0 ]; then
        [ ! -f /home/oracle/.bash_profile${daytime}.bak ] && su - oracle -c "cp /home/oracle/.bash_profile /home/oracle/.bash_profile${daytime}.bak"
        [ -f home/oracle/.bash_profile ] && su - oracle -c "sed -i '/^#OraConfBegin/,/^#OraConfEnd/d' /home/oracle/.bash_profile"
        cat <<EOF >>/home/oracle/.bash_profile
################OraConfBegin#########################
umask 022
export TMP=/tmp
export TMPDIR=\$TMP
export NLS_LANG=AMERICAN_AMERICA.${CHARACTERSET} #AL32UTF8,ZHS16GBK
export ORACLE_BASE=${ENV_ORACLE_BASE}
export ORACLE_HOME=${ENV_ORACLE_HOME}
export ORACLE_HOSTNAME=${HOSTNAME}
export ORACLE_TERM=xterm
export TNS_ADMIN=\$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export ORACLE_SID=${ORACLE_SID}
export PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$PATH
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias lsnrctl='rlwrap lsnrctl'
alias asmcmd='rlwrap asmcmd'
alias adrci='rlwrap adrci'
alias sas='sqlplus / as sysdba'
alias ggsci='rlwrap ggsci'
alias alert='tail -500f \$ORACLE_BASE/diag/rdbms/\$ORACLE_SID/\$ORACLE_SID/trace/alert_\$ORACLE_SID.log|more'
export PS1="[\`whoami\`@\`hostname\`:"'\$PWD]\$ '
################OraConfEnd###########################
EOF
    else
        if [ "${oracleSid}" != "${ORACLE_SID}" ]; then
            sed -i "s/ORACLE_SID=${oracleSid}/ORACLE_SID=${ORACLE_SID}/" /home/oracle/.bash_profile
        fi
        if [ "${oracleHostname}" != "${HOSTNAME}" ]; then
            sed -i "s/ORACLE_HOSTNAME=${oracleHostname}/ORACLE_HOSTNAME=${HOSTNAME}/" /home/oracle/.bash_profile
        fi
        if [ "${oracleBase}" != "${ENV_ORACLE_BASE}" ]; then
            sed -i "s#ORACLE_BASE=${oracleBase}#ORACLE_BASE=${ENV_ORACLE_BASE}#" /home/oracle/.bash_profile
        fi
        if [ "${oracleHome}" != "${ENV_ORACLE_HOME}" ]; then
            sed -i "s#ORACLE_HOME=${oracleHome}#ORACLE_HOME=${ENV_ORACLE_HOME}#" /home/oracle/.bash_profile
        fi
    fi
    logwrite "Oracle Profile" "cat /home/oracle/.bash_profile"
}

####################################################################################
# Install rlwrap
####################################################################################
InstallRlwrap() {
    if [ $(ls -l ${SOFTWAREDIR}/rlwrap-*gz | wc -l) -gt 0 ]; then
        rlwrap -v
        if [ $? -ne 0 ]; then
            tar -zxvf ${SOFTWAREDIR}/rlwrap* -C ${SOFTWAREDIR}
            cd ${SOFTWAREDIR}/rlwrap-*/
            ./configure
            make
            make install
        fi
        logwrite "rlwrap" "rlwrap -v"
    fi

}

####################################################################################
# Unzip DB Software
####################################################################################
UnzipDBSoft() {
    if [ "${DB_VERSION}" = "11.2.0.4" ]; then
        if [ $(ls -l ${SOFTWAREDIR}/p13390677_112040_Linux-x86-64_*of7.zip | wc -l) -gt 0 ]; then
            rm -rf ${SOFTWAREDIR}/database
            unzip -o ${SOFTWAREDIR}/p13390677_112040_Linux-x86-64_1of7.zip -d ${SOFTWAREDIR}
            unzip -o ${SOFTWAREDIR}/p13390677_112040_Linux-x86-64_2of7.zip -d ${SOFTWAREDIR}
        else
            c1 "Make sure the database installation package is in the ${SOFTWAREDIR} directory:" red
            c1 "p13390677_112040_Linux-x86-64_1of7.zip" blue
            c1 "p13390677_112040_Linux-x86-64_2of7.zip" blue
            exit 99
        fi
    elif [ "${DB_VERSION}" = "12.2.0.1" ]; then
        if [ $(ls -l ${SOFTWAREDIR}/linuxx64_12201_database.zip | wc -l) -gt 0 ]; then
            rm -rf ${SOFTWAREDIR}/database
            unzip -o ${SOFTWAREDIR}/linuxx64_12201_database.zip -d ${SOFTWAREDIR}
        else
            c1 "Make sure the database installation package is in the ${SOFTWAREDIR} directory:" red
            c1 "linuxx64_12201_database.zip" blue
            exit 99
        fi
    elif [ "${DB_VERSION}" = "18.0.0.0" ]; then
        if [ $(ls -l ${SOFTWAREDIR}/LINUX.X64_180000_db_home.zip | wc -l) -gt 0 ]; then
            unzip -o ${SOFTWAREDIR}/LINUX.X64_180000_db_home.zip -d ${ENV_ORACLE_HOME}
            chown -R oracle:oinstall ${ENV_ORACLE_HOME}
        else
            c1 "Make sure the database installation package is in the ${SOFTWAREDIR} directory:" red
            c1 "LINUX.X64_180000_db_home.zip" blue
            exit 99
        fi
    elif [ "${DB_VERSION}" = "19.3.0.0" ]; then
        if [ $(ls -l ${SOFTWAREDIR}/LINUX.X64_193000_db_home.zip | wc -l) -gt 0 ]; then
            unzip -o ${SOFTWAREDIR}/LINUX.X64_193000_db_home.zip -d ${ENV_ORACLE_HOME}
            chown -R oracle:oinstall ${ENV_ORACLE_HOME}
        else
            c1 "Make sure the database installation package is in the ${SOFTWAREDIR} directory:" red
            c1 "LINUX.X64_193000_db_home.zip" blue
            exit 99
        fi
    else
        c1 "Error database version! please check again!" red
        exit
    fi
}

####################################################################################
# Unzip DB Software
####################################################################################
InstallDBsoftware() {

    ####################################################################################
    # Unzip oracle OPATCH&&RU
    ####################################################################################
    if [ -n "${RU}" ]; then
        if [ "${DB_VERSION}" = "18.0.0.0" ] || [[ "${DB_VERSION}" = "19.3.0.0" ]]; then
            if [ "${DB_VERSION}" = "18.0.0.0" ]; then
                su - oracle -c "unzip -o ${SOFTWAREDIR}/p6880880_180000_Linux-x86-64.zip -d ${ENV_ORACLE_HOME}"
                if [ $? -ne 0 ]; then
                    c1 "Make sure the Patch 6880880 is in the ${SOFTWAREDIR} directory:" red
                    c1 "p6880880_180000_Linux-x86-64.zip" blue
                    exit 92
                fi
            elif [ "${DB_VERSION}" = "19.3.0.0" ]; then
                su - oracle -c "unzip -o ${SOFTWAREDIR}/p6880880_190000_Linux-x86-64.zip -d ${ENV_ORACLE_HOME}"
                if [ $? -ne 0 ]; then
                    c1 "Make sure the Patch 6880880 is in the ${SOFTWAREDIR} directory:" red
                    c1 "p6880880_190000_Linux-x86-64.zip" blue
                    exit 92
                fi
            fi

            if [ ! -d ${SOFTWAREDIR}/${RU} ]; then
                chown -R oracle:oinstall ${SOFTWAREDIR}
				if [ $? -ne 0 ]; then
                su - oracle -c "unzip -o ${SOFTWAREDIR}/*p${RU}* -d ${SOFTWAREDIR}"
                c1 "Make sure the database release update ${RU} is in the ${SOFTWAREDIR} directory:" red
                c1 "p${RU}.......zip" blue
                exit 99
				fi
            fi
        fi
    fi

    logwrite "OPatch Version" "su - oracle -c \"opatch version\""

    #Create db.rsp
    rm -rf ${SOFTWAREDIR}/db.rsp
    if [ ${DB_VERSION} = 11.2.0.4 ]; then
        cat <<EOF >>${SOFTWAREDIR}/db.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=${HOSTNAME}
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=${ENV_BASE_DIR}/oraInventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=${ENV_ORACLE_HOME}
ORACLE_BASE=${ENV_ORACLE_BASE}
oracle.install.db.InstallEdition=EE
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oinstall
DECLINE_SECURITY_UPDATES=true
oracle.installer.autoupdates.option=SKIP_UPDATES
EOF
    elif [ "${DB_VERSION}" = "12.2.0.1" ]; then
        cat <<EOF >>${SOFTWAREDIR}/db.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v12.2.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
ORACLE_HOME=${ENV_ORACLE_HOME}
INVENTORY_LOCATION=${ENV_ORACLE_INVEN}
ORACLE_BASE=${ENV_ORACLE_BASE}
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=$ENV_ORACLE_HOME
ORACLE_BASE=$ENV_ORACLE_BASE
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=racdba
DECLINE_SECURITY_UPDATES=true
EOF
    elif [ "${DB_VERSION}" = "18.0.0.0" ]; then
        cat <<EOF >>${SOFTWAREDIR}/db.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v18.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
ORACLE_HOSTNAME=${HOSTNAME}
ORACLE_HOME=${ENV_ORACLE_HOME}
INVENTORY_LOCATION=${ENV_ORACLE_INVEN}
ORACLE_BASE=${ENV_ORACLE_BASE}
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=racdba
EOF
    elif [ "${DB_VERSION}" = "19.3.0.0" ]; then
        cat <<EOF >>${SOFTWAREDIR}/db.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=${ENV_ORACLE_INVEN}
ORACLE_BASE=${ENV_ORACLE_BASE}
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=racdba
oracle.install.db.rootconfig.executeRootScript=false
oracle.install.db.rootconfig.configMethod=
EOF
    fi

    logwrite "${SOFTWAREDIR}/db.rsp" "cat ${SOFTWAREDIR}/db.rsp"

    #Install Database software
    chown oracle.oinstall ${SOFTWAREDIR}/db.rsp

    ##Juge whether ${ENV_ORACLE_INVEN}/ContentsXML/inventory.xml contains ${ENV_ORACLE_HOME},if exists ,delete it
    if [ -f "${ENV_ORACLE_INVEN}/ContentsXML/inventory.xml" ] && [ $(egrep "${ENV_ORACLE_HOME}" ${ENV_ORACLE_INVEN}/ContentsXML/inventory.xml | wc -l) -gt 0 ]; then
        line=$(grep -n "${ENV_ORACLE_HOME}" ${ENV_ORACLE_INVEN}/ContentsXML/inventory.xml | awk -F ":" '{print $1}')
        sed -i "${line} d" ${ENV_ORACLE_INVEN}/ContentsXML/inventory.xml
    fi

    if [[ "${DB_VERSION}" = "12.2.0.1" ]] || [[ "${DB_VERSION}" = "11.2.0.4" ]]; then
        su - oracle <<EOF
cd ${SOFTWAREDIR}/database;
./runInstaller -silent -force -ignoreSysPrereqs -responseFile ${SOFTWAREDIR}/db.rsp -ignorePrereq
EOF
    elif [ "${DB_VERSION}" = "18.0.0.0" ] || [[ "${DB_VERSION}" = "19.3.0.0" ]]; then
        if [ -n "${RU}" ]; then
            su - oracle <<EOF
cd ${ENV_ORACLE_HOME};
./runInstaller -silent -force -responseFile ${SOFTWAREDIR}/db.rsp -ignorePrereqFailure -waitForCompletion -applyRU ${SOFTWAREDIR}/${RU} 
EOF
        else
            su - oracle <<EOF
cd ${ENV_ORACLE_HOME};
./runInstaller -silent -force -responseFile ${SOFTWAREDIR}/db.rsp -ignorePrereqFailure -waitForCompletion
EOF
        fi
    fi
    if [ "${DB_VERSION}" = "11.2.0.4" ] || [ "${DB_VERSION}" = "12.2.0.1" ]; then
        c1 "Oracle Software Install Starting......" blue
        echo
        echo
        sleep 20
        echo
        echo
        c1 "When Successfully Setup Software Apper. Then Press Enter continue." fr
        echo
        echo
        read -p "Please Don't Press Enter. Now Waiting..........."
        echo
    fi
    if [ -f ${ENV_ORACLE_INVEN}/orainstRoot.sh ] || [ -f ${ENV_ORACLE_HOME}/root.sh ]; then
        ${ENV_ORACLE_INVEN}/orainstRoot.sh
        ${ENV_ORACLE_HOME}/root.sh
    else
        echo
        c1 "Oracle software installation failed, please check the log." red
        exit 99
    fi

    logwrite "Oracle RDBMS" "su - oracle -c \"sqlplus -V\""
    logwrite "OPatch lspatches" "su - oracle -c \"opatch lspatches\""

}

####################################################################################
# Create netca.rsp
####################################################################################
creareNetca() {
    rm -rf ${SOFTWAREDIR}/netca.rsp
    if [ "${DB_VERSION}" = "11.2.0.4" ]; then
        RESPONSEFILE_VERSION=11.2
    elif [ "${DB_VERSION}" = "12.2.0.1" ]; then
        RESPONSEFILE_VERSION=12.2
    elif [ "${DB_VERSION}" = "18.0.0.0" ]; then
        RESPONSEFILE_VERSION=18.0
    elif [ "${DB_VERSION}" = "19.3.0.0" ]; then
        RESPONSEFILE_VERSION=19.3
    fi

    cat <<EOF >>${SOFTWAREDIR}/netca.rsp
[GENERAL]
RESPONSEFILE_VERSION="${RESPONSEFILE_VERSION}"
CREATE_TYPE="CUSTOM"
[oracle.net.ca]
INSTALLED_COMPONENTS={"server","net8","javavm"}
INSTALL_TYPE=""typical""
LISTENER_NUMBER=1
LISTENER_NAMES={"LISTENER"}
LISTENER_PROTOCOLS={"TCP;1521"}
LISTENER_START=""LISTENER""
NAMING_METHODS={"TNSNAMES","ONAMES","HOSTNAME"}
NSN_NUMBER=1
NSN_NAMES={"EXTPROC_CONNECTION_DATA"}
NSN_SERVICE={"PLSExtProc"}
NSN_PROTOCOLS={"TCP;HOSTNAME;1521"}
EOF

    logwrite "${SOFTWAREDIR}/netca.rsp" "cat ${SOFTWAREDIR}/netca.rsp"

    su - oracle -c "netca -silent -responsefile ${SOFTWAREDIR}/netca.rsp"

    logwrite "ORACLE LISTENER" "su - oracle -c \"lsnrctl status\""
}

####################################################################################
## Create database
####################################################################################
createDB() {
    if [ "${DB_VERSION}" = "11.2.0.4" ]; then
        su - oracle -c "dbca -silent -createDatabase -templateName General_Purpose.dbc -responseFile NO_VALUE -gdbname ${ORACLE_SID} -sid ${ORACLE_SID} -sysPassword oracle -systemPassword oracle -redoLogFileSize 120 -storageType FS -datafileDestination ${ORADATADIR} -sampleSchema true -characterSet ${CHARACTERSET} -nationalCharacterSet AL16UTF16 -emConfiguration NONE -automaticMemoryManagement false -totalMemory ${totalMemory} -databaseType OLTP"
    elif [ "${DB_VERSION}" = "12.2.0.1" ] || [ "${DB_VERSION}" = "18.0.0.0" ] || [[ "${DB_VERSION}" = "19.3.0.0" ]]; then
        su - oracle -c "dbca -silent -createDatabase -templateName General_Purpose.dbc -responseFile NO_VALUE -gdbName ${ORACLE_SID} -sid ${ORACLE_SID} -sysPassword oracle -systemPassword oracle -redoLogFileSize 120 -storageType FS -datafileDestination ${ORADATADIR} -enableArchive true -archiveLogDest ${ARCHIVEDIR} -sampleSchema true -characterset ${CHARACTERSET} -nationalCharacterSet AL16UTF16 -emConfiguration NONE -automaticMemoryManagement false -totalMemory ${totalMemory} -databaseType OLTP -createAsContainerDatabase ${ISCDB} "
    fi

    logwrite "ORACLE Instance" "su - oracle -c \"lsnrctl status\""
}

####################################################################################
# Configure DBParaSet
####################################################################################
DBParaSet() {
    cat <<EOF >/home/oracle/oracleParaset.sql
--set db_create_file_dest
ALTER SYSTEM SET DB_CREATE_FILE_DEST='${ORADATADIR}';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=${ARCHIVEDIR}';
exit;
EOF

    su - oracle -c "sqlplus / as sysdba @/home/oracle/oracleParaset.sql"

    ####################################################################################
    # Create PDB and Set pdb autostart with cdb
    ####################################################################################
    if [ "${ISCDB}" = "TRUE" ]; then
        if [ ! -f /home/oracle/pdbs_save_state.sql ]; then
            cat <<EOF >>/home/oracle/pdbs_save_state.sql
--create pluggable database
create pluggable database ${PDBNAME} admin user admin identified by oracle;
--open pluggable database
alter pluggable database all open;
--set pdb autostart with cdb
alter pluggable database all save state;
exit
EOF
        fi

        su - oracle -c "sqlplus / as sysdba @/home/oracle/pdbs_save_state.sql"

        ####################################################################################
        # Configure instances autostart with OS start
        ####################################################################################
        if [ $(egrep "#OraConfBegin" /etc/oratab | wc -l) -eq 0 ]; then
            [ ! -f /etc/oratab.${DAYTIME} ] && cp /etc/oratab /etc/oratab.${DAYTIME}
            sed -i 's/db:N/db:Y/' /etc/oratab
            sed -i 's/ORACLE_HOME_LISTNER=$1/ORACLE_HOME_LISTNER=$ORACLE_HOME/' ${ENV_ORACLE_HOME}/bin/dbstart
            cat <<EOF >>/etc/rc.d/rc.local
#OraConfBegin
su oracle -lc "${ENV_ORACLE_HOME}/bin/lsnrctl start"
su oracle -lc ${ENV_ORACLE_HOME}/bin/dbstart
#OraConfEnd
EOF

            chmod +x /etc/rc.d/rc.local
        fi

        ####################################################################################
        # Configure del_arch.sh to crontab
        ####################################################################################
        ##create del_arch.sh
        if [ ! -f ${SCRIPTSDIR}/del_arch.sh ]; then
            echo '#!/bin/bash' >>${SCRIPTSDIR}/del_arch.sh
            echo 'source ~/.bash_profile' >>${SCRIPTSDIR}/del_arch.sh
            echo 'deltime=`date +"20%y%m%d%H%M%S"`' >>${SCRIPTSDIR}/del_arch.sh
            echo "rman target / nocatalog msglog ${SCRIPTSDIR}/del_arch_\${deltime}.log<<EOF" >>${SCRIPTSDIR}/del_arch.sh
            echo 'crosscheck archivelog all;' >>${SCRIPTSDIR}/del_arch.sh
            echo "delete noprompt archivelog until time 'sysdate-7';" >>${SCRIPTSDIR}/del_arch.sh
            echo "delete noprompt force archivelog until time 'SYSDATE-10';" >>${SCRIPTSDIR}/del_arch.sh
            echo 'EOF' >>${SCRIPTSDIR}/del_arch.sh
        fi

        ##create dbbackup_lv0.sh
        if [ ! -f ${SCRIPTSDIR}/dbbackup_lv0.sh ]; then
            echo '#!/bin/sh' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'source ~/.bash_profile' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'backtime=`date +"20%y%m%d%H%M%S"`' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo "rman target / log=${backupDir}/level0_backup_\${backtime}.log<<EOF" >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'run {' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'allocate channel c1 device type disk;' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'allocate channel c2 device type disk;' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'crosscheck backup;' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'crosscheck archivelog all; ' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'alter system switch logfile;' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'delete noprompt expired backup;' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'delete noprompt obsolete device type disk;' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo "backup incremental level 0 database include current controlfile format '${backupDir}/backlv0_%d_%T_%t_%s_%p';" >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'backup archivelog all DELETE INPUT;' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'release channel c1;' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'release channel c2;' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo '}' >>${SCRIPTSDIR}/dbbackup_lv0.sh
            echo 'EOF' >>${SCRIPTSDIR}/dbbackup_lv0.sh
        fi

        ##create dbbackup_lv1.sh
        if [ ! -f ${SCRIPTSDIR}/dbbackup_lv1.sh ]; then
            echo '#!/bin/sh' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'source ~/.bash_profile' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'backtime=`date +"20%y%m%d%H%M%S"`' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo "rman target / log=${backupDir}/level1_backup_\${backtime}.log<<EOF" >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'run {' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'allocate channel c1 device type disk;' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'allocate channel c2 device type disk;' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'crosscheck backup;' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'crosscheck archivelog all; ' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'alter system switch logfile;' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'delete noprompt expired backup;' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'delete noprompt obsolete device type disk;' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo "backup incremental level 1 database include current controlfile format '${backupDir}/backlv1_%d_%T_%t_%s_%p';" >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'backup archivelog all DELETE INPUT;' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'release channel c1;' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'release channel c2;' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo '}' >>${SCRIPTSDIR}/dbbackup_lv1.sh
            echo 'EOF' >>${SCRIPTSDIR}/dbbackup_lv1.sh
        fi

        ##create dbbackup_lv2.sh
        if [ ! -f ${SCRIPTSDIR}/dbbackup_lv2.sh ]; then
            echo '#!/bin/sh' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'source ~/.bash_profile' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'backtime=`date +"20%y%m%d%H%M%S"`' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo "rman target / log=${backupDir}/level2_backup_\${backtime}.log<<EOF" >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'run {' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'allocate channel c2 device type disk;' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'allocate channel c2 device type disk;' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'crosscheck backup;' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'crosscheck archivelog all; ' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'alter system switch logfile;' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'delete noprompt expired backup;' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'delete noprompt obsolete device type disk;' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo "backup incremental level 2 database include current controlfile format '${backupDir}/backlv2_%d_%T_%t_%s_%p';" >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'backup archivelog all DELETE INPUT;' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'release channel c2;' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'release channel c2;' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo '}' >>${SCRIPTSDIR}/dbbackup_lv2.sh
            echo 'EOF' >>${SCRIPTSDIR}/dbbackup_lv2.sh
        fi

        ####################################################################################
        # Configure scripts to crontab
        ####################################################################################
        ##Set to oracle crontab
        if [ ! -f /var/spool/cron/oracle ]; then
            echo "##For oracle" >>/var/spool/cron/oracle
        fi
        if [ $(egrep "#OraConfBegin" /var/spool/cron/oracle | wc -l) -eq 0 ]; then
            [ ! -f /var/spool/cron/oracle.${daytime} ] && cp /var/spool/cron/oracle /var/spool/cron/oracle.${daytime} >/dev/null 2>&1
            chown -R oracle:oinstall ${SCRIPTSDIR}/d*
            chmod +x ${SCRIPTSDIR}/d*
            echo "#OraConfBegin" >>/var/spool/cron/oracle
            echo "#12 00 * * * ${SCRIPTSDIR}/del_arch.sh" >>/var/spool/cron/oracle
            echo "#00 00 * * 0 ${SCRIPTSDIR}/dbbackup_lv0.sh" >>/var/spool/cron/oracle
            echo "#00 00 * * 1,2,4,5 ${SCRIPTSDIR}/dbbackup_lv1.sh" >>/var/spool/cron/oracle
            echo "#00 00 * * 3,6 ${SCRIPTSDIR}/dbbackup_lv2.sh" >>/var/spool/cron/oracle
            echo "#OraConfEnd" >>/var/spool/cron/oracle
        fi

        ####################################################################################
        # Configure PASSWORD_LIFE_TIME UNLIMITED
        ####################################################################################
        if [ "${ISCDB}" = "TRUE" ]; then
            cat <<EOF >/home/oracle/password_unlimt.sql
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
ALTER SESSION SET CONTAINER=${PDBNAME};
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
GRANT DBA TO ADMIN;
exit;
EOF
        else
            cat <<EOF >/home/oracle/password_unlimt.sql
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
exit;
EOF
        fi

        su - oracle -c "sqlplus / as sysdba @/home/oracle/password_unlimt.sql"
        ####################################################################################
        # Add pdb TNS
        ####################################################################################
        if [ $(egrep "#OraConfBegin" ${ENV_ORACLE_HOME}/network/admin/tnsnames.ora | wc -l) -eq 0 ]; then
            [ ! -f ${ENV_ORACLE_HOME}/network/admin/tnsnames.ora.${DAYTIME} ] && cp ${ENV_ORACLE_HOME}/network/admin/tnsnames.ora ${ENV_ORACLE_HOME}/network/admin/tnsnames.ora.${DAYTIME}
            su - oracle -c "cat <<EOF >>${ENV_ORACLE_HOME}/network/admin/tnsnames.ora
#OraConfBegin
${PDBNAME} =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ${HOSTNAME})(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ${PDBNAME})
    )
  )
#OraConfEnd
EOF
"
        fi

    fi

    ####################################################################################
    # Sqlnet.ora Configure lower Oracle client to connect
    ####################################################################################
    if [ $(egrep "#OraConfBegin" ${ENV_ORACLE_HOME}/network/admin/sqlnet.ora | wc -l) -eq 0 ]; then
        [ ! -f ${ENV_ORACLE_HOME}/network/admin/sqlnet.ora.${DAYTIME} ] && cp ${ENV_ORACLE_HOME}/network/admin/sqlnet.ora ${ENV_ORACLE_HOME}/network/admin/sqlnet.ora.${DAYTIME}
        su - oracle -c "cat <<EOF >>${ENV_ORACLE_HOME}/network/admin/sqlnet.ora
#OraConfBegin
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
#OraConfEnd
EOF
"
    fi

}

##remove instance
if [ -n "${REMOVEINSTANCE}" ]; then
    REMOVEINSTANCE
fi

##remove rdbms
if [ -n "${REMOVEDBSOFTWARE}" ]; then
    REMOVEDBSOFTWARE
fi

##For OS CONFIG
SetHostName
SetHosts
InstallRPM
CreateUsersAndDirs
TimeDepSet
Disableavahi
DisableFirewall
DisableSelinux
DisableTHPAndNUMA
DisableNetworkManager
EditParaFiles
InstallRlwrap

##If ONLY INSTALL ORACLE SOFTWARE
if [ "${ONLYCONFIGOS}" = 'N' ]; then
    UnzipDBSoft
    InstallDBsoftware
    if [ "${ONLYINSTALLSOFTWARE}" = 'N' ]; then
        creareNetca
        createDB
        DBParaSet
    fi
fi

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/273794.html

標籤:其他

上一篇:mysql排它鎖(FOR UPDATE) 場景介紹

下一篇:【JavaP6大綱】MySQL篇:四大屬性底層實作原理?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more