RSS
热门关键字:  下载  cms  模版  开源  dedecms
当前位置 :| 主页 > 站长学院 > 数据库 > Oracle >

Oracle的标准系统服务脚本-for Linux

来源:互联网技术在线 作者:cyy  时间:2006-10-06 Tag: 点击:
一、所谓标准系统服务,应该是满足以下几条标准的后台运行程序。

  1) 用chkconfig --add来安装,用chkconfig --list检查状态。

  2) 用ntsysv来定制某个服务,是否伴随机器的启动而自动启动。

  3) 在图形模式下,可以用serviceconf来启动、停止、重启服务。

  4) 开机象系统服务那样显示starting,关机显示shutting down。

  二、下面是具体的dbora脚本,在Redhat 7.3上通过,本人已经验证了几十次,保证能运行。

  备注:启动lsnrctl的时候不用su- 而使用su,否则失败,并且要求使用Oracle用户本身的BASH_ENV.脚本开头的几个ORA_xxx参数都要依照实际情况写,否则会说找不到Oracle程序或者pid.DOS格式方便发文,拷下来后请大家用UltraEdit转为Unix格式。

  ------------------------------------------------------------------------

  代码:

  #!/bin/bash
              #
              # /etc/rc.d/init.d/dbora
              #
              # Starts the dbora daemon
              #
              # chkconfig: 345 94 6
              # description: Runs commands scheduled by the at command at the time
              # specified when at was run, and runs batch commands when the load
            # average is low enough.
              # processname: dbora
              #
              # copyright: Written by Wwashington AT smth bbs, free to distribute.
              # You must keep everything in this file, including the copyright
              # announcement. Study demo: atd & postgresql in /etc/rc.d/init.d
              
              # Source function library.
              INITD=/etc/rc.d/init.d
              . $INITD/functions
              
              # Source system profile.
              if [ -r /etc/profile ] ; then . /etc/profile ; fi
              
              ORA_SID=udb01
              ORA_USER=oracle
              ORA_BASE=/udb01/app/oracle
              ORA_HOME=/udb01/app/oracle/product/8.1.7
              BASH_ENV=$ORA_BASE/.bashrc
              
              test -x $ORA_HOME/bin/dbstart || exit 0
              RETVAL=0
              
              GREP_UNIX=`uname | awk '{if($1 ~ /(^SunOS|^HP-UX)/) print $1}'`
              if ! [ "$GREP_UNIX" = "" ]
              then
                 GREP_FLAG=ef
              else
                 GREP_FLAG=efw
              fi
              
              RUNLEVEL=`runlevel | awk '{ print $2 }'`
              # RUNLEVEL=6
              
              case "$RUNLEVEL" in
              3)
                SH_FLAG=1
                ;;
              4)
                SH_FLAG=1
                ;;
              5)
                SH_FLAG=1
                ;;
              *)
                SH_FLAG=0
                ;;
              esac
              
              # Below is a debug info to display Show Flag
              # echo RUNLEVEL=$RUNLEVEL , SH_FLAG=$SH_FLAG
              
              #
              # See how we were called.
              #
              
              prog="dbora"
              
              start() {
                # Check flag, if dbora already started, quit dbora
                if [ ! -f /var/lock/subsys/dbora ]; then
                  echo -n $"Starting $prog: "
              
                # This is the background exec which can work under
                # both CLI (dbora) and GUI mode (serviceconf). We
                # must forward stderr to a file or null, otherwise
                # dbora won't start with a return code in GUI mode
                echo ""
                echo "[oralog] ----->"
                echo "Starting Oracle8i: "
                echo "-------------------------------------------------------------------------"
              # Please note that forward stderr(2) to /dev/null or &- means close stderr
                su - $ORA_USER -c "$ORA_HOME/bin/dbstart > /tmp/ORA-dbuplog" 2>/dev/null
              if [ $SH_FLAG -eq 1 ]; then
                cat /tmp/ORA-dbuplog
              fi
                echo
                echo "Starting TNS Listener:"
                echo "-------------------------------------------------------------------------"
                su $ORA_USER -c "$ORACLE_HOME/bin/lsnrctl start > /tmp/ORA-lsnrlog" 2>&-
              if [ $SH_FLAG -eq 1 ]; then
                cat /tmp/ORA-lsnrlog
              fi
              
                pid=`pidof -s ora_pmon_$ORA_SID`
                if [ "$pid" == "" ]; then
                 RETVAL=1;
                else
                 RETVAL=0;
                fi
              
                [ $RETVAL -eq 0 ] && touch /var/lock/subsys/dbora
                echo
                fi
                return $RETVAL
              }
              
              stop() {
                echo -n $"Stopping $prog: "
              
                # In order to use database local cmd to keep safe,
                # we use dbshut instead of simply kill ora_ proc.
                # When we reboot (runlevel = 0 or 6), no verbose.
                 # Force remove /var/lock/subsys/dbora to activate
              if [ $SH_FLAG -eq 1 ]; then
                echo ""
                echo "[oralog] ----->"
                echo "Shutting down TNS Listener:"
                echo "-------------------------------------------------------------------------"
                su $ORA_USER -c "$ORACLE_HOME/bin/lsnrctl stop"
              else
                su $ORA_USER -c "$ORACLE_HOME/bin/lsnrctl stop > /dev/null"
              fi
              if [ $SH_FLAG -eq 1 ]; then
                echo
              fi
              if [ $SH_FLAG -eq 1 ]; then
                echo "Shutting down Oracle8i: "
                echo "-------------------------------------------------------------------------"
                su - $ORA_USER -c "$ORA_HOME/bin/dbshut"
              else
                su - $ORA_USER -c "$ORA_HOME/bin/dbshut > /dev/null"
              fi
              
                pid=`ps -$GREP_FLAG | grep -e ora_ -e lsnr | grep -v grep | awk '{ print $2 }'`
              # Show pids when shutdown failed, to see debug info
              # echo $pid
              
                if [ $pid ]; then
                 failure ""
                else
                 success ""
                fi
                echo ""
                 rm -f /var/lock/subsys/dbora
                  return $RETVAL
              }
              
              restart() {
              echo "Restarting Oracle8i and Listener: "
              echo "========================================================================="
                stop
                start
              }
              
              reload() {
                restart
              }
              
              status_ol() {
               echo "Checking Oracle8i and Listener: "
               echo "========================================================================="
               su - $ORA_USER -c "$ORA_HOME/bin/dbstat"
              }
              
              case "$1" in
              start)
                start
                ;;
              stop)
                stop
                ;;
              reload|restart)
                restart
                ;;
              condrestart)
                if [ -f /var/lock/subsys/dbora ]; then
                  restart
                fi
                ;;
              status)
                status_ol
                ;;
              *)
                echo $"Usage: $0 {start|stop|restart|condrestart|status}"
                exit 1
              esac
              
              exit $?
              exit $RETVAL
  

  刚才的文件是 /etc/rc.d/init.d/dbora,现在补充一个,$ORACLE_HOME/bin/dbstat

  GREP_UNIX=`uname | awk '{if($1 ~ /(^SunOS|^HP-UX)/) print $1}'`
              
              if ! [ "$GREP_UNIX" = "" ]
              then
              GREP_FILE=/usr/xpg4/bin/grep
              GREP_FLAG=ef
              else
              GREP_FILE=/bin/grep
              GREP_FLAG=efw
              fi
              echo
              echo "# ps -$GREP_FLAG | $GREP_FILE -e ora_ -e lsnr| grep -v grep"
              echo
              ps -$GREP_FLAG | $GREP_FILE -e ora_ -e lsnr| grep -v grep
              echo
              


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
栏目列表