分享一个Linux下安装ASM+ORACLE的自动化脚本(二)

  在安装好linux操作系统并配置好静态IP之后,完整的Linux下 ASM+ORACLE安装大致分为如下三大部分:

 一、前期准备配置工作,需要使用root用户进行

【01】配置hosts映射

【02】检查并配置yum源并安装所需软件包

【03】创建oracle、grid 用户及对应组

【04】配置安全限制

【05】是否配置登录验证限制

【06】是否配置系统环境变量

【07】是否创建相应目录

【08】是否配置grid、oracle用户的环境变量
   添加好 ASM磁盘组所需磁盘,并重启系统    

【09】是否安装并配置oracleasm

【10】是否开始对ASM所需磁盘进行分区

【11】根据磁盘分区创建ASM磁盘

二、Grid infrastructure 安装

三、Oracle数据库软件安装及数据库创建

如上具体步骤不再详述。这里仅提供一个参考的文章  Oracle11gR2+ASM安装详细操作


     下面步入正题开始分享shell脚本,脚本分也分三部分 Oracle_Install_root.sh、Oracle_Install_grid.sh、Oracle_Install_oracle.sh 


      百度云盘下载地址


     在执行脚本之前,建议做如下确定一个在自己笔记本上可以携带的ftp server 或者web server站点,以方便后面配置为yum源 获取相关的 安装包。当然脚本亦支持官网的yum源、官网的下载地址,前提是得保证你的服务器连得上公网,这在生产环境显然是不被允许的。

我在编写调试该脚本时 使用的是在另一个Linux主机上搭建的 ftp server,把安装过程中可能用到的安装介质都放在一个源中,对于经常要安装数据库的DBA来说是十分方便的。

目录结构如下

 

把Oracle_Install_root.sh脚本上传到 服务器中

 初始执行,预览结构如下图

   


Oracle_Install_root.sh脚本源代码如下

 

#!/bin/bash
###########配置hosts#############################################
read -p "【01】是否配置hosts映射[Y|N]?[N]" hosts_answer
case $hosts_answer in
Y | y)
   echo "正在配置hosts文件"
   host_name=`hostname`
   ipstring=`ifconfig eth0 | gawk -F: '{print $2}' | sed '3,8d' | sed '1d' | gawk '{ print $1}'`
   IP=1
   function get_inputip {
   read -p "请指定为$host_name添加记录的IP地址:[$ipstring] : " IP
   check_ip
   }
   function check_ip {
      if [ $IP != "" ]
         then
           local answer="Y"
           read -p "确认添加hosts记录 $IP $host_name $host_name.localdomain[Y/N]?[Y]"  answer
           case $answer in
           Y | y)
               add_hosts;;
           N | n)
               get_inputip;;
           *)  
               get_inputip;;
           esac
         else
           read -p "确认添加hosts记录 $ipstring  $host_name $host_name.localdomain[Y/N]?"  answer
           case $answer in
           Y | y)
               IP=$ipstring
               add_hosts;;
           N | n)
               get_inputip;;
           *)  
               get_inputip;;
           esac
      fi         
   }
   function add_hosts {
   if `echo "$IP $host_name $host_name.localdomain" >> /etc/hosts`
   then
    echo "添加hosts记录成功!"
   else
    echo "添加记录失败,请手动添加,文件/etc/hosts "
   fi
   }
   get_inputip ;;
N | n)
   echo "已跳过hosts配置";;
*)
   echo "已跳过hosts配置";;
esac

##########配置yum源#############################################
#####oracle_linux6.5下适用方法##################################
function chk_cre_yum {
os_ver=`cat /etc/issue | sed '2d' | gawk '{ print \$5}' | gawk -F. '{print \$1}'`
if  [ $os_ver -eq 6 ]
  then
    if `yum clean all > yum_check.log && yum makecache >> yum_check.log`
       then
         echo "yum源可用"
       else
         echo "yum源不可用,开始配置yum源"
         sed -e 's!enabled=1!enabled=0!; s!enabled=$uekr3!enabled=0!; s!enabled=$uek!enabled=0!' /etc/yum.repos.d/public-yum-ol6.repo >> /etc/yum.repos.d/public-yum-ol6.repo.new
         rm -rf /etc/yum.repos.d/public-yum-ol6.repo
         mv /etc/yum.repos.d/public-yum-ol6.repo.new /etc/yum.repos.d/public-yum-ol6.repo
         read -p "请输入新的repo源英文名称: " repo_name
         read -p "请输入repo源的baseurl: " baseurl
            if `echo "[$repo_name]
name=$repo_name
baseurl=$baseurl
gpgcheck=0
enabled=1" >> /etc/yum.repos.d/public-yum-ol6.repo`
            then
               echo "新配置成功"
               chk_cre_yum
            else
               echo "配置失败"
            fi

   fi
fi
######oracle_linux 5.8下适用########################
if [ $os_ver -eq 5 ]
  then
  file_name=`ls /etc/yum.repos.d/ | sed -n '/\.repo/p'`
  first_file=`echo $file_name | gawk '{print \$1}'`
    if [ "$file_name" != "" ]
    then
       if `yum clean all > yum_check.log && yum makecache >> yum_check.log`
         then
         echo "yum源可用"
         else
         echo "yum源不可用,开始配置yum源"
         for file in $file_name
         do
         sed -e 's!enabled=1!enabled=0!; s!enabled=$uekr3!enabled=0!; s!enabled=$uek!enabled=0!' /etc/yum.repos.d/$file >> /etc/yum.repos.d/$file.new
         rm -rf /etc/yum.repos.d/$file
         mv /etc/yum.repos.d/$file.new /etc/yum.repos.d/$file
         done
         read -p "请输入新的repo源英文名称: " repo_name
         read -p "请输入repo源的baseurl: " baseurl
            if `echo "[$repo_name]
name=$repo_name
baseurl=$baseurl
gpgcheck=0
enabled=1" >> /etc/yum.repos.d/$first_file`
              then
               echo "新配置成功"
               chk_cre_yum
              else
               echo "配置失败"
            fi
       fi
    else
        read -p "请输入新的repo源英文名称: " repo_name
         read -p "请输入repo源的baseurl: " baseurl
            if `echo "[$repo_name]
name=$repo_name
baseurl=$baseurl
gpgcheck=0
enabled=1" >> /etc/yum.repos.d/public-yum-ol5.repo`
              then
               echo "新配置成功"
               chk_cre_yum
              else
               echo "配置失败"
            fi
    fi
   
fi
}

read -p "【02】是否检查并配置yum源并安装所需软件包[Y|N]?[N]?" yum_answer
case $yum_answer in
Y | y)
   if `chk_cre_yum >> yum_check.log`
    then
    echo "开始安装oracle必须软件包"
      if ` yum install kernel binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc+*  make numactl-devel sysstat libXp-1*  compat-libcap1.x86_64 elfutils-libelf-devel* unixODBC-devel unixODBC  -y >> yum_check.log`
      then
        echo "安装oracle必须软件包成功"
      else
        echo "安装oracle必须软件包失败"
       fi
    else
    echo "出现异常,请排查"
   fi;;
N | n)
     echo "已跳过yum源检查及软件包安装";;
*)
     echo "已跳过yum源检查及软件包安装";;
esac
     
############正在创建oracle、grid用户及对应组#####################
read -p "【03】是否创建oracle、grid 用户及对应组[Y/N]?[N]" user_answer
case $user_answer in
Y | y)
    echo "开始创建oracle、grid用户及对应组"
    if `groupadd oinstall`
      then 
    echo "成功创建组 oinstall"
      else
    echo "创建组 oinstall 失败"
    fi
    if `groupadd dba`
     then 
    echo "成功创建组 dba"
     else 
    echo "创建组 dba 失败"
    fi
    if `groupadd asmadmin`
      then
        echo "成功创建组 asmadmin"
      else
        echo "创建组 asmadmin 失败"
    fi
    if `groupadd asmdba`
      then
        echo "成功创建组 asmdba"
      else
        echo "创建组 asmdba 失败"
    fi
    if `useradd -g oinstall -G asmdba,asmadmin,dba grid`
      then
        echo "创建用户grid并指定 默认组 oinstall 所属组 asmdba,asmadmin,dba成功"
      else
       echo "创建用户 grid失败"
    fi
    if `useradd -g oinstall -G asmdba,dba oracle`
       then
       echo "创建用户oracle并指定 默认组 oinstall 所属组 asmdba,dba成功"
      else
       echo "创建用户 oracle失败"
    fi
    #echo "请指定用户grid的密码:"
    passwd grid
    #echo "请指定用户oracle的密码:"
    passwd oracle;;
N | n)
    echo "已跳过用户及组的创建";;
*)
    echo "已跳过用户及组的创建";;
esac

###########配置安全限制###########################################
read -p "【04】是否配置安全限制[Y/N]?[N]" secu_answer
case $secu_answer in
Y | y)
    echo "正在配置安全限制"
    if `echo "#====================oracle11gr2======================
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536" >> /etc/security/limits.conf`
       then
         echo "新增oracle、gird用户限制配置成功!"
       else
         echo "请手动检查配置文件 /etc/security/limits.conf"
     fi;;
N | n)
    echo "已跳过安全配置步骤";;
*)
    echo "已跳过安全配置步骤";;
esac

###########配置登录验证机制########################################
read -p "【05】是否配置登录验证限制[Y/N]?[N]" login_answer
case $login_answer in
Y | y)
    echo "正在配置登录验证机制"
    if `echo "#=================oracle11gr2=====================
session required pam_limits.so" >> /etc/pam.d/login`
     then 
        echo "配置登录机制成功"
     else 
        echo "配置登录机制失败"
     fi;;
N | n)
    echo "已跳过登录验证机制配置步骤";;
*)
    echo "已跳过登录验证机制配置步骤";;
esac

###########配置系统环境变量#########################################
read -p "【06】 是否配置系统环境变量[Y/N]?[N]" sys_answer
case $sys_answer in
Y | y)
    echo "正在配置oracle、grid 的系统环境变量"
      if `echo '#===================oracle11gr2=====================
    if [ \$USER = "oracle" ] || [ \$USER = "grid" ]; then
        if [ \$SHELL = "/bin/ksh" ]; then
                ulimit -p 16384
                ulimit -n 65536
        else
                ulimit -u 16384 -n 65536
        fi
     fi' >> /etc/profile`
       then 
        echo "配置成功"
       else 
        echo "配置失败"
       fi;;
N | n)
    echo "已跳过系统环境变量配置步骤";;
*)
    echo "已跳过系统环境变量配置步骤";;
esac
 
############创建相应目录#############################################
read -p "【07】是否创建相应目录[Y/N]?[N]" dir_answer
case $dir_answer in
Y | y)
    echo "开始创建目录"
    if `mkdir -p /u01/app/oracle && chown -R oracle:oinstall /u01 && chmod -R 775 /u01`
       then 
         echo "创建oracle安装目录成功"
       else 
         echo "创建oracle安装目录失败"
    fi
    if `mkdir -p /u02/app/grid && chown -R grid:oinstall /u02 && chmod -R 775 /u02`
        then
           echo "创建grid安装目录成功"
        else
           echo "创建grid安装目录失败"
    fi;;
N | n)
    echo "已跳过相应目录创建步骤";;
*)
    echo "已跳过相应目录创建步骤";;
esac

#############配置grid、oracle用户的环境变量##########################
read -p "【08】是否配置grid、oracle用户的环境变量[Y/N]?[N]" usre_answer
case $usre_answer in
Y | y)
    echo "开始配置 grid用户的环境变量"
     if `echo '#========================oracle11ggrid ========================
umask 022
TMP=/tmp
TMPDIR=/tmp
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ORACLE_BASE=/u02/app/grid
ORACLE_HOME=\$ORACLE_BASE/11.2.0
ORACLE_SID=+ASM
PATH=\$ORACLE_HOME/bin:\$PATH
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH TMP TMPDIR
stty erase ^h' >> /home/grid/.bash_profile`
       then
         echo "配置grid用户环境变量成功"
     else
         echo "配置grid用户环境变量失败"
    fi

    echo "开始配置oracle用户的环境变量"
    if `echo '#======================oracle11gr2=========================
umask 022
TMP=/tmp
TMPDIR=/tmp
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
LD_LIBRARY_PATH=/usr/lib:/usr/X11R6/lib
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db_1
ORACLE_SID=orcl
LD_LIBRARY_PATH=\$ORACLE_HOME/jdk/jre/lib/i386:\$ORACLE_HOME/jdk/jre/lib/i386/server:\$ORACLE_HOME/rdbms/lib:\$ORACLE_HOME/lib:\$LD_LIBRARY_PATH
PATH=\$ORACLE_HOME/bin:\$PATH
NLS_LANG=American_America.ZHS16GBK
export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH PATH NLS_LANG TMP TMPDIR
stty erase ^h' >> /home/oracle/.bash_profile`
     then
       echo "配置oracle用户环境变量成功"
     else
       echo "配置oracle用户环境变量失败"
     fi;;
N | n)
    echo "已跳过用户变量配置步骤";;
*)
    echo "已跳过用户变量配置步骤";;
esac

##########后续提示###################################################
echo "          环境配置工作已经完成,请确认已经添加好 ASM磁盘组所需磁盘,并重启系统!    "


##########安装oracleasm-support 、oracleasm 、oracleasmlib###################################################
read -p "【09】是否安装并配置oracleasm[Y/N]?[N]" asm_answer
case $asm_answer in
Y | y)
        echo "正在从yum源中安装 oracleasm-support"
        yum install oracleasm-support -y
       #针对低版本内核 需要执行下面的安装
        yum install oracleasm* -y          
    if `rpm -q oracleasmlib >> yum_check.log `
      then 
         echo "系统已经安装了 oracleasmlib"
      else 
         read -p  "请输入下载oracleasmlib rpm的URL地址: " ASMLIB_URL
         wget $ASMLIB_URL
         echo "开始安装 Asmlib rpm"
         rpm -ivh oracleasmlib*
    fi
    echo "开始配置ASM   Default user: grid  Default group: asmadmin"
    function asmconfig {
       /etc/init.d/oracleasm configure
      if `/usr/sbin/oracleasm init`
        then 
          echo "asm配置成功"
      else
          asmconfig
      fi
    }
    asmconfig;;
N | n)
    echo "已跳过oracleasm安装及配置步骤";;
*)
    echo "已跳过oracleasm安装及配置步骤";;
esac
##########开始对新磁盘进行分区###########################################
read -p "【10】是否开始对ASM所需磁盘进行分区[Y/N]?[N]" disk_answer
case $disk_answer in
Y | y)
    echo "开始为电脑磁盘分区,如系统未识别出磁盘,请确定磁盘已正常添加并重启计算机"
    disk_string="null"
    function getdisks {
     ls /dev/sd?
     read -p "请输入要使用的磁盘绝对路径,多个磁盘使用空格进行分割,本脚本会帮助你进行磁盘分区: " disk_string
     for disk in $disk_string
       do
         echo "磁盘:$disk"
     done
    }
    function f_disks { 
     for disk in $disk_string
       do
         echo "开始对磁盘$disk进行分区"
         fdisk $disk
     done
    }
    getdisks
    function checkdisks {
     read -n1 -p "确认上述磁盘选择无误,针对上述磁盘进行分区[Y/N]?[Y]" answer
     case $answer in
     Y | y)
      echo "下面开始对所选择磁盘进行分区"
      f_disks;;
     N | n) 
      echo "请重新指定磁盘"
       getdisks
       checkdisks;;
     *) 
      echo "下面开始对所选择磁盘进行分区"
      f_disks;;
     esac
    }
    checkdisks;;
N | n)
    echo "已跳过磁盘分区步骤";;
*)
    echo "已跳过磁盘分区步骤";;
esac
##########开始创建ASM磁盘###########################################
read -p "【11】是否开始根据磁盘分区创建ASM磁盘[Y/N]?[N]" asmdisk_answer
case $asmdisk_answer in
Y | y)
    echo "开始创建ASM磁盘"
    diskp_string="null"
    function getdiskps {
    ls   /dev/sd??
    read -p "请输入要使用的分区后的磁盘绝对路径,多个磁盘使用空格进行分割,本脚本会帮助你创建ASM磁盘: " diskp_string
     for diskp in $diskp_string
       do
         echo "磁盘分区:$diskp"
     done
    }
    function create_asmdisks { 
     i=0
     for diskp in $diskp_string
       do
         echo "开始创建ASM磁盘ASM0$i"
         oracleasm createdisk ASM0$i $diskp
         i=$[ $i + 1 ]
     done
    }

    getdiskps

    function checkdiskps {
     read -n1 -p "确认上述磁盘分区选择无误,系统将在上述分区中创建ASM磁盘[Y/N]?[Y]" answerp
     case $answerp in
     Y | y)
          echo "下面开始针对分区创建ASM磁盘"
          create_asmdisks;;
     N | n) 
          echo "请重新指定磁盘"
          getdiskps
           checkdiskps;;
     *) 
          echo "下面开始对所选择磁盘进行分区"
          create_asmdisks;;
     esac
    }
 
    checkdiskps;;
N | n)
    echo "已跳过ASM磁盘创建步骤";;
*)
    echo "已跳过ASM磁盘创建步骤";;
esac

##############修复grid在oracle_linux 6.5上安装时的bug########################################
os_ver=`cat /etc/issue | sed '2d' | gawk '{ print \$5}' | gawk -F. '{print \$1}'`
if  [ $os_ver -eq 6 ]
  then
     if `echo '# Oracle OHASD startup
      start on runlevel [35]
     stop on runlevel [!35]
     respawn
     exec /etc/init.d/init.ohasd run >/dev/null 2>&1 </dev/null'  > /etc/init/oracle-ohasd.conf`
     then
        echo "修复成功"
     else 
        echo "修复失败"
     fi
elif [ $os_ver -eq 5 ]
   then
      echo "该版本无需修复"
fi


Oracle_Install_grid.sh源代码如下:

#!/bin/bash
grid_load_url="null"
function wget_grid_url {
 echo "通过网络获取Oracle_grid安装包"
 read -p "请输入完整的grid安装包下载地址:"  grid_load_url
 echo $grid_load_url
}

function grid_url_check {
 read -p "是否从该网络地址中下载安装包$grid_load_url [Y/N]? [Y]" gridurl_answer
 case $gridurl_answer in
 Y | y)
     wget $grid_load_url;;
 N | n)
     wget_grid_url;;
 *)
     wget $grid_load_url;;
 esac    
}

function unzip_grid {
  echo "开始解压安装包"
  unzip /home/grid/*grid.zip
}

function install_grid {
  export LANG=en_US.UTF-8
  read -p  "请去确认已使用root用户执行了 xhost + 命令!!![Y/N] [Y]" xhost_answer
  case $xhost_answer in
  Y | y)
     /home/grid/grid/runInstaller;;
  N | n)
     sleep 3
     install_grid;;
  *)
     /home/grid/grid/runInstaller;;
  esac
}

current_user=`who am i | gawk '{print $1}'`
current_dir=`pwd`
if [ $current_user = 'grid' ] && [ $current_dir = '/home/grid' ]
  then
    wget_grid_url
    grid_url_check
    unzip_grid
    install_grid
    crsctl modify resource "ora.cssd" -attr "AUTO_START=1"
    crsctl modify resource "ora.diskmon" -attr "AUTO_START=1"
  else
    echo "当前终端会话原始用户为$current_user,安装必须使用grid用户直接建立的会话"
    echo "执行脚本当前所在目录为$current_dir,脚本要求必须是在grid用户的家目录,/home/grid"
fi

Oracle_Install_oracle.sh源代码如下:

#!/bin/bash
oracle_load_url="null"
function wget_oracle_url {
 echo "通过网络获取Oracle安装包"
 read -p "请输入完整的oracle安装包下载地址,若为多个下载地址请用空格隔开:"  oracle_load_url
 for oracle_url in $oracle_load_url
   do
    echo $oracle_url
   done
}

function oracle_url_check {
 read -p "是否从该网络地址中下载安装包 [Y/N]? [Y]" oracleurl_answer
 case $oracleurl_answer in
 Y | y)
   for oracle_url in $oracle_load_url
      do
        wget $oracle_url
      done;;
 N | n)
    wget_oracle_url;;
 *)
     for oracle_url in $oracle_load_url
      do
        wget $oracle_url
      done;;
 esac    
}

function unzip_oracle {
  echo "开始解压安装包"
  database_string=`ls /home/oracle/ | grep linux.x64_11gR2_database`
  for dbfile in $database_string
   do
       unzip $dbfile
  done
  echo "数据库安装文件解压完成"
}

function install_oracle {
  export LANG=en_US.UTF-8
  read -p  "请去确认已使用root用户执行了 xhost + 命令!!![Y/N] [Y]" xhost_answer
  case $xhost_answer in
  Y | y)
     /home/oracle/database/runInstaller;;
  N | n)
     sleep 3
     install_oracle;;
  *)
     /home/oracle/database/runInstaller;;
  esac
}

current_user=`who am i | gawk '{print $1}'`
current_dir=`pwd`
if [ $current_user = 'oracle' ] && [ $current_dir = '/home/oracle' ]
  then
    wget_oracle_url
    oracle_url_check
    unzip_oracle
    install_oracle
  else
    echo "当前终端会话原始用户为$current_user,安装必须使用oracle用户直接建立的会话"
    echo "执行脚本当前所在目录为$current_dir,脚本要求必须是在oracle用户的家目录,/home/oracle"
fi



下面将会通过one by one 来详细说明并演示 脚本的使用


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值