千家信息网

oracle 11g r2 一键配置脚本

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,最近工作需要安装oracle 11g R2在阿里云ECS上,因此编写了一个脚本来完成图形化安装界面之前的准备工作,这样节省时间,shell如下:#!/bin/bashSYSCTL="/etc/sysc
千家信息网最后更新 2025年02月01日oracle 11g r2 一键配置脚本

最近工作需要安装oracle 11g R2在阿里云ECS上,因此编写了一个脚本来完成图形化安装界面之前的准备工作,这样节省时间,shell如下:

#!/bin/bashSYSCTL="/etc/sysctl.conf"LIMITS="/etc/security/limits.conf"PAM="/etc/pam.d/login"PROFILE="/etc/profile"BASH_PROFILE="/home/oracle/.bash_profile"oracle_passwd='oracle'SID=orcllang="AMERICAN_AMERICA.AL32UTF8"#ora_install_dir=/u01#ora_database_dir=/u02ORACLE_BASE=$ora_install_dir/app/oracleORACLE_HOME=$ORACLE_BASE/product/11.2.0/db#初始化检查,OS版本、内存、磁盘情况check_init(){    OS=`cat /etc/redhat-release`    MEM=`free -m |grep 'Mem' | awk '{print $2}'`    CPUS=`grep -i "processor" /proc/cpuinfo  | wc -l`    echo "系统版本:$OS"    echo "内存:${MEM}M"    echo "CPU核数:$CPUS"}#检查swap空间是否分配check_swap(){mem=`free -g |grep 'Mem' | awk '{print $2}'`mem_temp=$(($mem%2))swap_all=`free -m |grep 'Swap' |awk '{print $2}'`if [ $mem_temp == 1 ];then    mem=$(($mem+1))    swap=$(($mem/2))    echo -e "\n\e[1;32m 系统内存为 ${mem}GB \e[0m"fiswap_check="`grep -i 'swaptotal' /proc/meminfo |awk '{print $2}'`"if [[ $swap_check = "0" ]];then    read -p " swap分区没有设置,请进行设置,输入[y] or [n]:" temp    if [ $temp == "y" ];then        COUNT=$(($swap * 1024))        echo -e "\n\e[1;31m 开始设置swap分区,/mnt/swap=${swap}GB \e[0m"        dd if=/dev/zero of=/mnt/swap bs=1M count=${COUNT}        mkswap /mnt/swap        swapon /mnt/swap        echo "/mnt/swap swap swap defaults 0 0" >> /etc/fstab        else            echo "请检查或手工设置swap分区后运行该脚本!"            exit 1    fielse   echo -e "\n\e[1;31m系统内存为${mem}GB 当前swap分区已经配置,大小为${swap_all}MB \e[0m"fi}#检查是否root用户执行脚本isroot(){    if [ $USER != "root" ];then        echo -e "\n\e[1;31m The user must be root,and you user is $USER,please su to root.\e[0m"        exit 4    fi}#创建oracle用户oracle_useradd(){    if [[ `grep "oracle" /etc/passwd` != "" ]];then        echo -e "\e[1;31m User oracle exits, delete and create oracle! \e[0m" && sleep 2        userdel -rf oracle            fi        if [[ `grep "oinstall" /etc/group` = "" ]];then        groupadd oinstall     fi    if [[ `grep "dba" /etc/group` = "" ]];then        groupadd dba    fi    useradd oracle -g oinstall -G dba && echo $oracle_passwd |passwd oracle --stdin    if [ $? -eq 0 ];then        echo -e "\n\e[1;32m oracle's password update successfully ---OK! \e[0m"    else        echo -e "\n\e[1;31m oracle's password set failed.         ---NO! \e[0m"    fi}#创建oracle使用的目录oracle_dirs(){    read -p "please input oracle install dirname,default /u01": ora_install_dir     read -p "please input oracle database dirname,default /u02": ora_database_dir    mkdir -p $ora_install_dir/app/oracle/{oraInventory,product/11.2.0/db}    mkdir -p "$ora_database_dir/oradata/oradb"    chown -R oracle:oinstall $ora_install_dir    chown -R oracle.oinstall $ora_database_dir    chmod -R 755 $ora_install_dir $ora_database_dir    if [ $? == 0 ];then        echo "$ora_install_dir  create sucessfully!"        echo "$ora_database_dir  create sucessfully!"    else        echo "$ora_install_dir or $ora_database_dir create Failed,please check!"        exit 2    fi}#配置profile文件oracle_profile(){if [  -f "/etc/profile.bak" ];then    rm -rf /etc/profile >/dev/null        cp /etc/profile.bak /etc/profile    cat <<  EOF >>$PROFILEif [ $USER = "oracle" ];then    if [ $SHELL = "/bin/ksh" ];then        ulimit -p 16384        ulimit -n 65536    else        ulimit -u 16384 -n 65536    fifiEOFelse     cp /etc/profile /etc/profile.bak    cat <<  EOF >>$PROFILEif [ $USER = "oracle" ];then    if [ $SHELL = "/bin/ksh" ];then        ulimit -p 16384        ulimit -n 65536    else        ulimit -u 16384 -n 65536    fifiEOFfi  if [ $? -eq 0 ];then        echo -e "\n\e[1;32m $PROFILE update successfully... OK! \e[0m"  fi}#配置.bash_profile()oracle_bash(){if [ -f "/home/oracle/.bash_profile.bak" ];thenrm -rf $BASH_PROFILE>/dev/nullcp /home/oracle/.bash_profile.bak $BASH_PROFILE    cat <> $BASH_PROFILEexport ORACLE_BASE=$ORACLE_BASEexport ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbexport ORACLE_SID=$SIDexport ORACLE_TERM=xtermexport ORACLE_OWNER=oracleexport TNS_ADMIN=$ORACLE_HOME/network/adminexport ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/dataexport LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/lib:/usr/lib:/usr/local/libexport LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/lib:/usr/lib:/usr/local/libexport PATH=$PATH:/sbin:/usr/bin:/usr/sbin:$JAVA_HOME/bin:$ORACLE_HOME/bin:$ORACLE_HOME/lib:$HOME/bin:$ORACLE_HOME/OPatch:.umask 022export NLS_LANG=$langEOFelsecp $BASH_PROFILE /home/oracle/.bash_profile.bakcat <> $BASH_PROFILEexport ORACLE_BASE=$ORACLE_BASEexport ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbexport ORACLE_SID=$SIDexport ORACLE_TERM=xtermexport ORACLE_OWNER=oracleexport TNS_ADMIN=$ORACLE_HOME/network/adminexport ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/dataexport LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/lib:/usr/lib:/usr/local/libexport LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/lib:/usr/lib:/usr/local/libexport PATH=$PATH:/sbin:/usr/bin:/usr/sbin:$JAVA_HOME/bin:$ORACLE_HOME/bin:$ORACLE_HOME/lib:$HOME/bin:$ORACLE_HOME/OPatch:.umask 022export NLS_LANG=$langEOFfi    if [ $? -eq 0 ];then        echo -e "\n\e[1;32m $BASH_PROFILE update successfully...OK! \e[0m"    fi}#设置limit资源限制oracle_limit(){if [ -f "/etc/security/limits.conf.bak" ];thenrm -rf $LIMITS>/dev/nullcp /etc/security/limits.conf.bak $LIMITS    cat <> $LIMITSoracle              soft    nproc   8192oracle              hard    nproc   16384oracle              soft    nofile  8192oracle              hard    nofile  65536EOFelsecp $LIMITS /etc/security/limits.conf.bak    cat <> $LIMITSoracle              soft    nproc   8192oracle              hard    nproc   16384oracle              soft    nofile  8192oracle              hard    nofile  65536EOFfi    if [ $? -eq 0 ];then        echo -e "\n\e[1;32m $LIMITS update sucessfully...OK! \e[0m"    fi}#设置内核参数oracle_kernal(){if [ -f /etc/sysctl.conf.bak ];thenrm -rf $SYSCTL>/dev/nullcp /etc/sysctl.conf.bak $SYSCTLsed -i 's/kernel.msgmnb.*/#kernel.msgmnb = 65536/g' $SYSCTLsed -i 's/kernel.msgmax.*/#kernel.msgmax = 65536/g' $SYSCTLsed -i 's/kernel.shmmax.*/#kernel.shmmax = 68719476736/g' $SYSCTLsed -i 's/kernel.shmall.*/#kernel.shmall = 4294967296/g' $SYSCTL    cat <> $SYSCTLkernel.shmall = 2097152kernel.shmmax = 2147483648kernel.shmmni = 40960kernel.sem = 250 32000 100 128kernel.msgmni = 4096kernel.msgmax = 65536kernel.msgmnb = 84000fs.file-max = 6815744net.ipv4.ip_local_port_range = 9000 65500fs.file-max = 6815744net.core.rmem_default = 262144net.core.rmem_max = 4194304net.core.wmem_default = 262144net.core.wmem_max = 1048576fs.aio-max-nr = 1048576net.ipv4.tcp_wmem = 262144 262144 262144net.ipv4.tcp_rmem = 4194304 4194304 4194304EOFelsecp $SYSCTL /etc/sysctl.conf.baksed -i 's/kernel.msgmnb.*/#kernel.msgmnb = 65536/g' $SYSCTLsed -i 's/kernel.msgmax.*/#kernel.msgmax = 65536/g' $SYSCTLsed -i 's/kernel.shmmax.*/#kernel.shmmax = 68719476736/g' $SYSCTLsed -i 's/kernel.shmall.*/#kernel.shmall = 4294967296/g' $SYSCTL    cat <> $SYSCTLkernel.shmall = 2097152kernel.shmmax = 2147483648kernel.shmmni = 40960kernel.sem = 250 32000 100 128kernel.msgmni = 4096kernel.msgmax = 65536kernel.msgmnb = 84000fs.file-max = 6815744net.ipv4.ip_local_port_range = 9000 65500fs.file-max = 6815744net.core.rmem_default = 262144net.core.rmem_max = 4194304net.core.wmem_default = 262144net.core.wmem_max = 1048576fs.aio-max-nr = 1048576net.ipv4.tcp_wmem = 262144 262144 262144net.ipv4.tcp_rmem = 4194304 4194304 4194304EOFfi    if [ $? -eq 0 ];then        echo -e "\n\e[1;32m $SYSCTL update sucessfully...OK! \e[0m"    fi}#关闭iptables and selinuxiptables_selinux(){    service iptables stop && chkconfig iptables off    setenforce 0 &>/dev/null    sed -i '/SELINUX/s/enforcing/disabled/;/SELINUX/s/permissive/disabled/' /etc/selinux/config}#下载oracle安装文件get_oracle(){    wget http://10.139.96.23:8080/p13390677_112040_Linux-x86-64_1of7.zip  -P /home/oracle && wget http://10.139.96.23:8080/p13390677_112040_Linux-x86-64_2of7.zip -P /home/oracle}#oracle安装准备主程序main(){    isroot    check_init && sleep 1    check_swap && sleep 1    oracle_useradd && sleep 1    oracle_dirs && sleep 1    oracle_profile && sleep 1    oracle_bash && sleep 1    oracle_limit && sleep 1    oracle_kernal && sleep 1    iptables_selinux     && sleep 1    get_oracle && sleep 1    if [ $? -eq 0 ] ;then        echo -e "\n\e[1;32m oracle初始化配置已经完成,请确保图形化界面正常工作,执行./database安装程序! \e[0m"    fi}main


0