频道栏目
首页 > 资讯 > Linux > 正文

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

04-10-20        来源:[db:作者]  
收藏   我要投稿

发信人: Wwashington (Jacky), 信区: NewSoftware
标 题: Oracle 的标准系统服务脚本 for Redhat Linux
发信站: BBS 水木清华站 (Sat Oct 16 22:08:19 2004), 站内

作者:Wwashington AT smth bbs
时间:2004/10/16

前言:欢迎转载,但是您必须保留原文所有信息,包括作者和时间。

一、这个跟国庆前我发表的 dbids 类似,是把数据库作为标准服务
安装到 Linux 的系统脚本。这个也是原创的,与青蛙网友分享。

二、所谓标准系统服务,应该是满足以下几条标准的后台运行程序。
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 wont 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 "#

相关TAG标签
上一篇:带宽估算问题
下一篇:bat几种循环
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站