实现用response文件静态安装Oracle

首先得有一个response文件,这个文件可能从/staging/response中得到。当然还得做必要的修改。

可以根据需要做一些修改:

RESPONSEFILE_VERSION=2.2.1.0.0
FROM_LOCATION="../stage/products.xml"
ORACLE_HOME="/u01/app/oracle/product/10.1.0/db_1"
ORACLE_HOME_NAME="OUIHome1"
TOPLEVEL_COMPONENT={"oracle.server","10.1.0.3.0"}
DEINSTALL_LIST={"oracle.server","10.1.0.3.0"}

。。。

s_superAdminPasswdType="N"
b_useSamePassword=false
s_superAdminSamePasswd="oracle"
s_superAdminSamePasswdAgain="oracle"
sl_superAdminPasswds={"sys","system","oracle","oracle"}
sl_superAdminPasswdsAgain={"sys","system","oracle","oracle"}

 


接着在linux环境中还得做不好工作,当然这些都可以放到一个shell脚本中一次做完:

  •  创建oraInst.loc文件,对于第一次安装,这是必要的

      #if oracle was never installed in this machine, it is must
function create_oraInst_file()
{
   #create file /etc/oraInst.loc
   echo "Create oracle location file /etc/oraInst.loc"
   echo
   rm -f /etc/oraInst.loc
   touch oraInst.loc
   cat >> oraInst.loc << EOF
inventory_loc=${ORACLE_BASE}/oraInventory
inst_group=oinstall
EOF
   cp oraInst.loc /etc/oraInst.loc
   chown oracle:oinstall /etc/oraInst.loc
   chmod 664 /etc/oraInst.loc
   mkdir ${ORACLE_BASE}/oraInventory
   chown oracle:oinstall ${ORACLE_BASE}/oraInventory

   rm -f oraInst.loc
}

  • 增加必要的用户和组

     create user and group
#include groups: osinstall, dba, oper
#include use: oracle
function add_groups_and_user()
{
   #add groups for installing oracle
   echo
   echo "check or add the groups for installing ORACLE "
   echo
   [ "`grep oinstall: /etc/group`" = "" ] && sudo /usr/sbin/groupadd oinstall
   [ "`grep dba: /etc/group`" = "" ] && sudo /usr/sbin/groupadd dba
   [ "`grep oper /etc/group`" = "" ] && sudo /usr/sbin/groupadd oper
   ! id oracle >&/dev/null && useradd oracle
   usermod -g oinstall -G dba oracle

   ORACLE_USER_DIR=$(get_user_directory oracle)
   echo "User oracle directory: $ORACLE_USER_DIR"

   cp /etc/sudoers /etc/sudoers.bak
   sed '/.*/{/^( )*oracle/d}' /etc/sudoers > sudoers
   cat >> sudoers <<EOF
oracle ALL=(ALL) NOPASSWD: ALL
EOF
   cp -f sudoers /etc/
   rm -f sudoers
}

  • 创建必要的目录

#create oracle directory
function create_directory()
{
   #make oracle_base
   echo "make ORACLE_BASE:${ORACLE_BASE}"
   echo
   rm -rfv ${ORACLE_BASE}
   mkdir -pv ${ORACLE_BASE}
   mkdir -pv ${ORACLE_BASE}/oradata
   chown -R oracle:oinstall ${ORACLE_BASE}
   chmod -R 775 ${ORACLE_BASE}

   #make directory /var/opt/oracle to contain files that describe various components of the
   #Oracle server software installation
   echo "make directory /var/opt/oracle to contain files that describe various components"
   echo "of the Oracle server software installation"
   echo
   mkdir -pv /var/opt/oracle
   chown oracle:dba /var/opt/oracle
   chmod 755 /var/opt/oracle
}

  • 更改操作系统的参数配置

#config system
function config_system_parameters()
{
   echo "Config system parameters."
   echo
   cp /etc/sysctl.conf /etc/sysctl.conf.bak
   sed '/.*/{/^kernel.shmall/d;/^kernel.shmmax/d;/^kernel.shmmni/d;/kernel.sem /d;/^fs.file-max/d;/^net.ipv4.ip_local_port_range/d}' /etc/sysctl.conf > sysctl.conf
   cat >> sysctl.conf <<EOF
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
EOF
   cp -f sysctl.conf /etc/
   rm -f sysctl.conf
}

#need to change /etc/redhat-release
function config_release()
{
   echo "Config OS release."
   echo
   [ -f /etc/redhat-release ] && mv /etc/redhat-release /etc/redhat-release.bak
   cat >> redhat-release << EOF
Red Hat Enterprise Linux AS release 2.1 (Nahant Update 1)
EOF
   cp -f redhat-release /etc/
   rm -f redhat-release
}

function config_security_parameters()
{
   echo "Config security parameters."
   echo
   cp /etc/security/limits.conf /etc/security/limits.conf.bak
   sed '/.*/{/oracle/d}' /etc/security/limits.conf > limits.conf
   cat >> limits.conf <<EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
EOF
   cp -f limits.conf /etc/security/limits.conf
   rm -f limits.conf
  
   cp /etc/pam.d/login /etc/pam.d/login.bak
   if [ "`grep -c '^session.*required.*pam_limits.so' /etc/pam.d/login`" ]; then
      echo "session required /lib/security/pam_limits.so" >> /etc/pam.d/login
   fi
}

function config_user_parameters()
{
   local user_name=$1
   echo "Config $user_name user parameters."
   echo
   local user_dir=$(get_user_directory $user_name)
   eval "sed '/.*/{/ORACLE/d}' ${user_dir}/.bashrc > bash_profile"
   cat >> bash_profile <<EOF
[ -f /etc/bashrc ] && . /etc/bashrc
ORACLE_BASE=${ORACLE_BASE}
ORACLE_HOME=\$ORACLE_BASE/product/10.1.0/db_1
ORACLE_SID=bmcs
PATH=\$ORACLE_HOME/bin:\$PATH
LD_LIBRARY_PATH=\$ORACLE_HOME/jdk/jre/lib/i386
LD_LIBRARY_PATH=\$ORACLE_HOME/jdk/jre/lib/i386/server:\$LD_LIBRARY_PATH
export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH PATH
EOF
   eval "sed -n '/.*/w ${user_dir}/.bashrc' bash_profile"
   . ${user_dir}/.bashrc
   rm -f bash_profile
}

 

最后好好写安装命令,因为命令比较复杂也放到一个文件中了:

RETURN_CODE_ERROR_NET=101
RETURN_CODE_ERROR_CREATE_DB=102
RETURN_CODE_ERROR_OTHER=100

cmd="/home/oracle/Disk1/runInstaller -silent -responseFile /home/oracle/enterprise.rsp | awk \
'{if ( match(\$0,/^Check|Done|^Please check|successful|complete|succeed|in progress|^[^ ].*ing/) ) print \$0; \
if ( match(\$0,/^Launch.* Net.* Assistant/) ) {print \$0;print \"Config Oracle net ...\"};
if ( match(\$0,/^Launch.* Database.* Assistant/) ) {print \$0;print \"Create Database ...\"};
if ( endflag0 == 1 ) {exit endflag1}; \
if ( match(\$0,/Net Assistant .* unsucceed/) ) {endFlag1=$RETURN_CODE_ERROR_NET}; \
if ( match(\$0,/Database Assistant .* unsucceed/) ) {endFlag1=$RETURN_CODE_ERROR_NET}; \
if ( match(\$0,/The Installation .* successful/) ) {endFlag0=1;endFlag1=0}; \
if ( match(\$0,/The Installation .* unsuccessful/) ) {endFlag0=1;endFlag1=$RETURN_CODE_ERROR_OTHER} }'"
eval "$cmd"
retValue=$?

exit $retValue

 

OK了。

 

当然这个脚本还有很多需要完善,有空再做了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值