oracle instance and listener auto start

这里记录一下oracle单实例情况下的instance和listener的自动启动,因为RAC环境中,当os启动的时候,crs会协调好自启动的事情,不用管理员额外操心。在win平台,instance和listener是以服务的形式存在于os上,缺省也是自动随着os启动的。linux环境中,管理员需要额外的操心,写个简单的脚本,让instance和listener随着os能启动起来。

$ORACLE_HOME/bin中有这么一个文件,dbstart。这个其实就是oracle准备好的现成启动脚本,其中包含了:instance、listener部分,甚至包含了asm instance部分。管理员只需将dbstart脚本中做很少的改动,然后放到linux启动顺序执行的脚本中即可,或者放到/etc/rc.local中。

su - oracle -c "$ORACLE_HOME/bin/dbstart"

除了/etc/oratab中将”开关”至于”Y”上,dbstart中需要额外注意两部分。

listener部分:将ORACLE_HOME_LISTNER赋予相应的值即可,这部分负责监听程序的启动。

# First argument is used to bring up Oracle Net Listener
ORACLE_HOME_LISTNER=/home/oracle/product/10.2.0
if [ ! $ORACLE_HOME_LISTNER ] ; then
  echo "ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener"
  echo "Usage: $0 ORACLE_HOME"
else
  LOG=$ORACLE_HOME_LISTNER/listener.log

  # Set the ORACLE_HOME for the Oracle Net Listener, it gets reset to
  # a different ORACLE_HOME for each entry in the oratab.
  export ORACLE_HOME=$ORACLE_HOME_LISTNER

  # Start Oracle Net Listener
  if [ -x $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then
    echo "$0: Starting Oracle Net Listener" >> $LOG 2>&1
    $ORACLE_HOME_LISTNER/bin/lsnrctl start >> $LOG 2>&1 &
    export VER10LIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep "LSNRCTL for " | cut -d' ' -f5 | cut -d'.' -f1`
  else
    echo "Failed to auto-start Oracle Net Listener using $ORACLE_HOME_LISTNER/bin/tnslsnr"
  fi
fi

instance部分:确保$ORACLE_HOME参数正确即可。

# Starts a Database Instance
startinst() {
  # Called programs use same database ID
  export ORACLE_SID

  # Put $ORACLE_HOME/bin into PATH and export.
  PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/etc ; export PATH
  # add for bug # 652997
  LD_LIBRARY_PATH=${SAVE_LLP}:${ORACLE_HOME}/lib ; export LD_LIBRARY_PATH
  PFILE=${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
  SPFILE=${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora
  SPFILE1=${ORACLE_HOME}/dbs/spfile.ora

  echo ""
  echo "$0: Starting up database "$ORACLE_SID""
  date
  echo ""

  checkversionmismatch

  # See if it is a V6 or V7 database
  VERSION=undef
  if [ -f $ORACLE_HOME/bin/sqldba ] ; then
    SQLDBA=sqldba
    VERSION=`$ORACLE_HOME/bin/sqldba command=exit | awk '
      /SQL*DBA: (Release|Version)/ {split($3, V, ".") ;
      print V[1]}'`
    case $VERSION in
      "6") ;;
      *) VERSION="internal" ;;
    esac
  else
    if [ -f $ORACLE_HOME/bin/svrmgrl ] ; then
      SQLDBA=svrmgrl
      VERSION="internal"
    else
      SQLDBA="sqlplus /nolog"
    fi
  fi

  STATUS=1
  if [ -f $ORACLE_HOME/dbs/sgadef${ORACLE_SID}.dbf ] ; then
    STATUS="-1"

可以手工运行dbstart,看是否能正确的把instance和listener启动起来。

–EOF–