使用Shell脚本实现自动化静默安装Oracle软件

1、首先需要搭建一个Web站点,用于提供yum服务和oracle软体下载,类似软件资料库一样。(也可使用Ftp服务代替Web服务,看自己的选择)

2、Oracle软件安装时,建议不要安装在根目录下,所以此脚本中/u 目录为一个分区,若无/u分区,则相关目录会在根目录下。此脚本还可以结合PXE+KICKSTART无人值守安装实现批量部署。

3、脚本内容如下:

#!/bin/bash
################################################################################################
# Install softeare -- Install oracle 11g database software
# 
# History: 2016/01/25 zhuwei First release
################################################################################################
# set a safe path before doing anything else
PATH=/sbin:/usr/sbin:/bin:/usr/bin; export PATH
WEBSITE="http://192.168.1.10"
#-----------------------------------------------------------------------------------------------
# This script must be executed as root
RUID=`/usr/bin/id|awk -F\( ‘{print $1}‘|awk -F\= ‘{print $2}‘`
if [ ${RUID} != "0" ];then
    $ECHO "This script must be executed as root"
    exit 1
fi
#-----------------------------------------------------------------------------------------------
prepareSystem(){
# Set SElinux to disabled mode regardless of its initial value
  sed -i -e ‘s/^SELINUX=.*/SELINUX=disabled/‘ /etc/selinux/config
  setenforce 0
# stop iptables
  /etc/init.d/iptables stop
# *** Chkconfig section 
# Turn off unwanted services
  chkconfig --level 0123456 iptables off
  chkconfig --level 0123456 ip6tables off
}
#-----------------------------------------------------------------------------------------------
# Display an error and exit
errorExit() {
    echo "[email protected]" >&2
    exit 1
}
#-----------------------------------------------------------------------------------------------
# Display the normal print
displayheader() {
    echo -e "\033[32m*******************************************************************\033[0m"
    echo -e "\033[32m*\033[0m"[email protected]""
    echo -e "\033[32m*******************************************************************\033[0m"
    echo ""
}
#-----------------------------------------------------------------------------------------------
#download oracle software
download(){
    wget -N -q -P /u $WEBSITE/oracle11g/p10404530_112030_Linux-x86-64_1of7.zip
    wget -N -q -P /u $WEBSITE/oracle11g/p10404530_112030_Linux-x86-64_2of7.zip
    
    unzip -q -d /u /u/p10404530_112030_Linux-x86-64_1of7.zip
    unzip -q -d /u /u/p10404530_112030_Linux-x86-64_2of7.zip
    
    rm -rf /u/p10404530_112030_Linux-x86-64_1of7.zip
    rm -rf /u/p10404530_112030_Linux-x86-64_2of7.zip
    
    chown -R oracle:oinstall /u/database
}
#-----------------------------------------------------------------------------------------------
#Configure the kernel params
Configure1(){
    cat >> /etc/sysctl.conf <<EOF
fs.aio-max-nr = 1048576
fs.file-max = 6815744
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
EOF
    if [ $? != 0 ]; then
        errorExit ‘Unable to configure sysctl settings for database‘
    fi
    return 0
}
Configure2(){
    cat >> /etc/security/limits.conf <<EOF
oracle   soft  nproc   2047
oracle   hard  nproc   16384
oracle   soft  nofile  1024
oracle   hard  nofile  65536
EOF
   if [ $? != 0 ]; then
        errorExit ‘Unable to configure settings for database‘
   fi
   
   return 0
}
Configure3(){
    cat >> /etc/pam.d/login <<EOF
session    required     pam_limits.so
EOF
   if [ $? != 0 ]; then
        errorExit ‘Unable to configure settings for database‘
   fi
   
   return 0
}
#-----------------------------------------------------------------------------------------------
#In the table below for the list of users and user groups
#
#   User Name          Group Name
#   ---------          -------
#   oracle             dba,oinstall
#   grid               asmdba(If using the asm storage)
#
#Add Users and Groups
addUsers(){
   GROUPEXIT1=`grep oinstall /etc/group|awk -F: ‘{print $1}‘`
   if [ -z ${GROUPEXIT1} ]; then
      /usr/sbin/groupadd oinstall || errorExit ‘Unable to add oinstall group‘
   fi
   GROUPEXIT2=`grep dba /etc/group|awk -F: ‘{print $1}‘`
   if [ -z ${GROUPEXIT2} ]; then
     /usr/sbin/groupadd dba || errorExit ‘Unable to add dba group‘
   fi
   USERSEXIT=`grep oracle /etc/shadow | awk -F: ‘{print $1}‘`
   if [ -z ${USERSEXIT} ]; then
     /usr/sbin/useradd -d /home/oracle -g oinstall -G dba oracle && passwd -l oracle    || errorExit ‘Unable to add oracle user‘
   #这里oracle用户是锁定的,不能通过ssh进行登录的,使用su - oracle切换用户之后操作是没有
    #问题的,其实这里也可以使用usermod -L oracle && chage -d 0 oracle 让oracle用户第一次登录    #时要求修改密码。
   fi
   return 0
}
#-----------------------------------------------------------------------------------------------
#Configure the oracle user‘s environment
profile(){
    cat >> /home/oracle/.bash_profile <<EOF
export TMP=/tmp
export TMPDIR=\$TMP
export ORACLE_SID=test
export ORACLE_BASE=/u/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db_1
export TNS_ADMIN=\$ORACLE_HOME/network/admin
export ORACLE_TERM=xterm
export PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib:\$ORACLE_HOME/jdbc/lib
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
export NLS_LANG="AMERICAN_AMERICA.GB2312"
export NLS_DATE_FORMAT=‘yyyy/mm/dd hh24:mi:ss‘
umask 022
if [ $USER = "oracle" ]; then
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
  else
    ulimit -u 16384 -n 65536
  fi
fi
EOF
    if [ $? != 0 ]; then
       errorExit ‘bash_profile this file does not exist‘
    fi
    
    return 0
}
#-----------------------------------------------------------------------------------------------
#To establish the oracle software installation directory
directory(){
    if [ ! -d "/u/app/oracle" ]; then
       mkdir -p /u/app/oracle
    fi
    chown -R oracle:oinstall /u/app
    chmod -R 775 /u/app
}
HOSTNAME=`hostname`
PATH1="/u/database/response"
#-----------------------------------------------------------------------------------------------
#Configure the oracle silent installation files
silent(){
    ORACLE_BASE="\/u\/app\/oracle"
    ORACLE_HOME=${ORACLE_BASE}"\/product\/11\.2\.0\/db_1"
    A1="ORACLE_HOSTNAME\="
    A2="INVENTORY_LOCATION\="
    A3="ORACLE_HOME\="
    A4="ORACLE_BASE\="
    B1=${A1}${HOSTNAME}
    B2=${A2}${ORACLE_BASE}"\/oraInventory"
    B3=${A3}${ORACLE_HOME}
    B4=${A4}${ORACLE_BASE}
    mv -f $PATH1/db_install.rsp $PATH1/db_install.rsp.bak
    wget -N -q -P  $PATH1 $WEBSITE/oracle11g/db_install.rsp
    sed -i -e "s/${A1}/${B1}/g" -e "s/${A2}/${B2}/g" -e "s/${A3}/${B3}/g"     -e "s/${A4}/${B4}/g" $PATH1/db_install.rsp || errorExit "The configuration file failed!"
     #这里的wget下载下来的db_install.rsp文件有一通用的部分我是处理过的,然后放到Web服务端
     #提供下载,修改过的内容如下:
     #oracle.install.option=INSTALL_DB_SWONLY
     #UNIX_GROUP_NAME=oinstall
     #SELECTED_LANGUAGES=en
     #oracle.install.db.InstallEdition=EE
     #oracle.install.db.DBA_GROUP=dba
     #oracle.install.db.OPER_GROUP=dba
     #DECLINE_SECURITY_UPDATES=true
     
}
################################################################################################
# Detect and install oracle rpm package you need
VERSION1=`sed -n ‘1p‘ /etc/issue|awk ‘BEGIN{OFS=""} {print $1,$2,$7}‘`
VERSION2=`sed -n ‘1p‘ /etc/issue|awk ‘BEGIN{OFS=""} {print $1,$2,$7}‘|awk -F. ‘{print $1}‘`
VALUE=`/usr/bin/getconf LONG_BIT`
OSDIGIT=`/bin/uname -m`
P_YUM="/etc/yum.repos.d/"
#-----------------------------------------------------------------------------------------------
# Download yum client configure file
/usr/bin/wget -N -q -P $P_YUM $WEBSITE/rhelrepo/$VERSION2.repo || errorExit ‘Failed to download the yum client files,Please manually configure!‘
/bin/sed -i ‘s/RedHat/‘$VERSION1\_$OSDIGIT‘/g‘ $P_YUM$VERSION2.repo || errorExit ‘Replace the files is not successful,Please manually configure!‘
if [ -f $P_YUM$VERSION2.repo ]; then
    displayheader "Successfully configured yum client, please continue"
fi
#-----------------------------------------------------------------------------------------------
# RedHat 5 and RedHat 6 install oracle software required RPM package
Red5=(binutils-2* compat-libstdc++-33* elfutils-libelf-0.* elfutils-libelf-devel-0.* elfutils-libelf-devel-static-0.* gcc-4.* gcc-c++-4*  glibc-2.* glibc-common-2.* glibc-devel-2.* glibc-headers-2* kernel-headers-2.* libaio-0.* libaio-devel-0.* libgcc-4.* libgomp-4.* libstdc++-4.* libstdc++-devel-* make-* numactl-devel-* sysstat-* pdksh-* ksh-* unixODBC-* unixODBC-devel-*)
Red6=(binutils-2* compat-libstdc++-33* elfutils-libelf-0.* elfutils-libelf-devel-0.* gcc-4.* gcc-c++-4* glibc-2.* glibc-common-2.* glibc-devel-2.* glibc-headers-2* kernel-headers-2.* libaio-0.* libaio-devel-0.* libgcc-4.* libgomp-4.* libstdc++-4.* libstdc++-devel-* make-* numactl-devel-* sysstat-* pdksh-* unixODBC-* unixODBC-devel-*)
len5=${#Red5[@]}
len6=${#Red6[@]}
COUNT=0
#-----------------------------------------------------------------------------------------------
# Test your system has been installed the RPM package
displayheader "You have installed the required RPM package is as follows:"
if [ $VERSION2 == "RedHat5" ] ; then
for((i=0;i<len5;i++));
do
        CHAR=${Red5[$i]}
        rpm -qa | grep "^$CHAR"
        if [ $? != 0 ] ; then
                UNINSTALL[$COUNT]=${Red5[$i]}
                COUNT=$(($COUNT+1))
        fi
done
fi
if [ $VERSION2 == "RedHat6" ] ; then
for((i=0;i<len6;i++));
do
        CHAR=${Red6[$i]}
        rpm -qa | grep "^$CHAR"
        if [ $? != 0 ] ; then
                UNINSTALL[$COUNT]=${Red6[$i]}
                COUNT=$(($COUNT+1))
        fi
done
fi
printf ‘\n‘
#-----------------------------------------------------------------------------------------------
# Will not install the RPM packages for installation
if [ $COUNT -gt "0" ];then
     displayheader "Do you have "$COUNT" rpm package not installed,not installed patch is:"
     len=${#UNINSTALL[@]}
     for((j=0;j<len;j++));
     do
         echo "${UNINSTALL[$j]}"
     done 
     printf ‘\n‘
     read -p  "Are you sure to install the patch[yes or y]:" SELECT
     printf ‘\n‘
     if [ $SELECT == "yes" -o $SELECT == "y" ]; then
         for((l=0;l<len;l++));
         do
             VAR=${UNINSTALL[$l]}
             if [ $VAR == "pdksh-5.2.14-36.el5.x86_64.rpm" ]; then
                rpm -qa ksh-*
                if [ $? == 0 ]; then
                  yum -q -y remove ksh-*
                fi
             fi
             yum -q -y install $VAR
         done
     fi
else
    displayheader "Required RPM packages have been installed"
fi
prepareSystem || errorExit ‘Failed to prepare system‘
Configure1 && displayheader "The configure1 successful execution" || errorExit ‘Failed to system‘
Configure2 && displayheader "The configure2 successful execution" || errorExit ‘Failed to system‘
Configure3 && displayheader "The configure1 successfu3 execution" || errorExit ‘Failed to system‘
addUsers && displayheader "Building a successful oracle users and groups" || errorExit ‘Failed to system‘
directory && displayheader "Building a successful directory" || errorExit ‘Failed to system‘
profile || errorExit ‘Failed to system‘
displayheader "Is the download file, please wait a few minutes" && download
silent && displayheader "Modify db_install. RSP file successfully" || errorExit ‘Failed to system‘
displayheader "Is database software installed, please wait"
chmod a+x ${PATH1}/db_install.rsp
chown oracle:oinstall ${PATH1}/db_install.rsp
su - oracle -c "/u/database/./runInstaller -silent -force -responseFile ${PATH1}/db_install.rsp -ignoreSysPrereqs"

执行以上脚本后还需要执行$ORACLE_BASE/oraInventory/orainstRoot.sh和$ORACLE_HOME/root.sh两个脚本。

时间: 2024-10-13 06:34:43

使用Shell脚本实现自动化静默安装Oracle软件的相关文章

静默安装Oracle软件

1.静默安装Oracle软件 Oracle的静默安装需要用到一个response文件,这个文件可以通过事先使用OUI录制: 执行以下命令,然后在OUI中根据提示执行安装数据库软件的操作 $./runInstaller –record –destinationFile /tmp/install_database.rsp 注意: (1)录制过程中选择只安装数据库软件不创建数据库 (2)当安装界面到达最后一步时选择cancel 录制成功后,就可以使用产生的响应文件回放整个安装过程了: (1)执行以下命

Linux静默安装Oracle

打算在云服务器上装oracle服务,以前DBA美眉都是在图形化界面下安装,这次抓瞎了.赶紧上网查查,静默安装可以解决问题.于是乎赶紧开始部署,过程如下.安装环境:操作系统:CentOS 7内存:11G(11851M)硬盘:128Goracle版本 11g 1.准备oracle 安装包 linux.x64_11gR2_database_1of2.zip 和 linux.x64_11gR2_database_2of2.zip 2.检查本机依赖包,没找到的用 yum install ****** 命令

RedHat 6 静默安装Oracle 11gR2

之前看了网上很多篇Linux静默安装Oracle的文章,但安装测试时老觉得有问题,后来直接找来Oracle官方英文文档并仔细阅读研究rsp文件的内容说明,经过自己在虚拟机中的安装测试,使用RedHat 6.5(内核版本:2.6.32-431.el6.x86_64)上静默安装Oracle 11gR2(版本:11.2.0.3),整理出了本文,主要包括了环境要求与准备.静默安装Oracle软件与监听.静默安装Oracle数据库.安装完成后检查.设置Oracle开机自动启动等部分. 一. 环境要求与准备

linux 之静默安装oracle

Web服务器上面的Linux一般是不会有图形界面的,所有通过图形界面来安装Linux的方式在没有图形界面的Linux上面是行不通的,我们要使用的安装方式叫做Linux的静默安装.即在没有图形界面的Linux上面安装. 1. 下载地址 http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 下载.tar.gz文件即可,oracle在Window上面是有分位数的,但在linux上面没有分,只

Linux静默安装oracle 11g

之前在oracle安装过程中碰到了很多问题,浪费了不少问题,后来有哥同事给了以下安装文档,解决了很多多问题,也提到了很多在安装过程中碰到的问题! 所以记录一下 本文档是Oracle Database 11.2.0.1 for RHEL5 Server(包括x86和x86_64平台)的静默安装指南. 所有操作无需使用图形界面. 静默安装能减少安装出错的可能性, 也能大大加快安装速度. # 后跟命令表示以操作系统下root用户操作; $ 后跟命令表示以操作系统下oracle用户操作; 1.1 上传软

RedHat 7 静默安装Oracle 12c

之前在网上看了很多Oracle的静默安装教程,感觉有些乱,经过自己查阅Oracle官网英文手册,结合在虚拟机中安装测试,整理出了这篇RedHat 7 静默安装Oracle 12c.redhat 6静默安装Oracle 11g R2也已基本整理好了,等有时间了再发出来. 本文原始出处:江健龙的技术博客http://jiangjianlong.blog.51cto.com/3735273/1792451 一.环境要求与准备 1.硬件要求 (1)磁盘空间 EnterpriseEdition : 6.4

静默安装Oracle

Oracle Database,又名Oracle RDBMS,或简称Oracle.是甲骨文公司的一款关系型数据库管理系统.它是在数据库领域一直处于领先地位的产品.可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好.使用方便.功能强,适用于各类大.中.小.微机环境.它是一种高效率.可靠性好的 适应高吞吐量的数据库解决方案. 环境配置 1.安装centos6.5操作系统 物理内存不少于1G 硬盘可以空间不少于5G swap分区空间不少于2G 支持256色以上显卡 cpu

静默安装oracle 11g及参数配置优化详解

一.安装前准备工作1.修改主机名#vi /etc/hosts   //并添加内网IP地址对应的hostname,如下127.0.0.1           localhost::1                   localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.8.151          linux-test 2.修改standby数据库的/etc/sysconfig/iptables文件,

CentOS7 静默安装Oracle 11gR2(11.2.0.1)

最近有个项目需要迁移,项目中数据库用的是oracle,期间折腾了好久,特此记录. 一,下载Oracle 1,首先下载Oracle 11gR2,地址如下:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html?spm=a2c4e.11153940.blogcont566703.10.36ae6c23iChOrf2,在页面上方勾选同意许可:3,在下方选择对应的oracle版本,这里选择11g