当前位置:数据库 > Oracle >>

Oracle的标准系统服务脚本forRedhatLinux

答案:发信人: 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 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

 

上一个:sqlplus连接另外服务器的数据库
下一个:保持Oracle数据优良性能的若干诀窍

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,