`
freeheron
  • 浏览: 67452 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

实现用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了。

 

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

 

分享到:
评论

相关推荐

    java web 视频、电子书、源码(李兴华老师出版)

    5.5.1、静态包含 5.5.2、动态包含 5.6、跳转指令 5.7、实例操作:用户登陆程序实现(JSP + JDBC实现) 5.7.1、创建数据库表 5.7.2、程序实现思路 5.7.3、程序实现 5.8、本章摘要 5.9、开发实战讲解(基于...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    5.5.1、静态包含 5.5.2、动态包含 5.6、跳转指令 5.7、实例操作:用户登陆程序实现(JSP + JDBC实现) 5.7.1、创建数据库表 5.7.2、程序实现思路 5.7.3、程序实现 5.8、本章摘要 5.9、开发实战讲解(基于...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    5.5.1、静态包含 5.5.2、动态包含 5.6、跳转指令 5.7、实例操作:用户登陆程序实现(JSP + JDBC实现) 5.7.1、创建数据库表 5.7.2、程序实现思路 5.7.3、程序实现 5.8、本章摘要 5.9、开发实战讲解(基于...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    5.5.1、静态包含 5.5.2、动态包含 5.6、跳转指令 5.7、实例操作:用户登陆程序实现(JSP + JDBC实现) 5.7.1、创建数据库表 5.7.2、程序实现思路 5.7.3、程序实现 5.8、本章摘要 5.9、开发实战讲解(基于...

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    5.5.1、静态包含 5.5.2、动态包含 5.6、跳转指令 5.7、实例操作:用户登陆程序实现(JSP + JDBC实现) 5.7.1、创建数据库表 5.7.2、程序实现思路 5.7.3、程序实现 5.8、本章摘要 5.9、开发实战讲解(基于...

    java 面试题 总结

    静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面&lt;%@ include file="included.htm" %&gt; 23、什么时候用assert。 assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都...

    李兴华Java Web开发实战经典(高清版) Part2

    6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、...

    C#编程经验技巧宝典

    16 &lt;br&gt;0033 Return语句的使用 17 &lt;br&gt;0034 如何实现无限循环 17 &lt;br&gt;0035 巧用foreach语句控制控件 18 &lt;br&gt;0036 有效使用switch case语句 18 &lt;br&gt;2.3 运算符 19 &lt;br&gt;0037 如何使用...

    一个基于SpringBoot的微服务脚手架+源代码+文档说明

    # ZEN-SCAFFOLD ## 概述 ...3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    亮剑.NET深入体验与实战精要2

    9.2.1 StreamWriter类实现写文件 368 9.2.2 通过File类创建文件 369 9.2.3 通过FileStream类创建文件 370 9.2.4 通过FileInfo类创建文件 370 9.2.5 追加文本 370 9.2.6 读取文本文件 371 9.2.7 读写二进制文件 372 ...

    亮剑.NET深入体验与实战精要3

    9.2.1 StreamWriter类实现写文件 368 9.2.2 通过File类创建文件 369 9.2.3 通过FileStream类创建文件 370 9.2.4 通过FileInfo类创建文件 370 9.2.5 追加文本 370 9.2.6 读取文本文件 371 9.2.7 读写二进制文件 372 ...

    超级有影响力霸气的Java面试题大全文档

    静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面&lt;%@ include file="included.htm" %&gt; 26、什么时候用assert。 assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都...

    java微信公众号MVC开发框架

    实际可以灵活设置参数,例如我们可以在方法中设置HttpServletRequest request,HttpServletResponse response,InMessage in, WeixinContext context等参数,这部分内容也放在使用参考部分说明。 本例中方法的返回...

    Loadrunner报错日志

    1、方法一,在脚本前加入web_set_sockets_option("OVERLAPPED_SEND", "0"),禁用TTFB细分,问题即可解决,但是TTFB细分图将不能再使用,附图。 2、方法二,可以通过增加连接池和应用系统的内存,每次增加25%。 ...

Global site tag (gtag.js) - Google Analytics