Linux 下Oracle 开机自启动 与 oratab, dbstart 脚本 说明

时间:2023-01-17 15:39:28

 

一./etc/oratab说明

直接使用cat 查看这个文件:

 

gg1:/home/oracle> cat /etc/oratab
#

# This file is used by ORACLEutilities. It is created by root.sh
# and updated by the Database ConfigurationAssistant when creating
# a database.

# A colon, ':', is used as the fieldterminator. A new line terminates
# the entry. Lines beginning with a pound sign, '#', arecomments.
#
# Entries are of the form:
# $ORACLE_SID:$ORACLE_HOME:<N|Y|W>:
#
# The first and second fields are thesystem identifier and home
# directory of the databaserespectively. The third filed indicates
# to the dbstart utility that the databaseshould , "Y", or should not,
# "N", be brought up at systemboot time.
#
# Multiple entries with the same$ORACLE_SID are not allowed.
#
#
gg1:/u01/app/oracle/product/11.2.0.3/db_1:N

这里是我测试环境上的文件,在这个注释里面,对这个文件讲的比较清楚。/etc/oratab 由root.sh 脚本创建,在用DBCA 创建实例时也会更新这个文件。

 

当$ORACLE_SID:$ORACLE_HOME:<N|Y> 设置为Y时,允许实例自启动,当设置为N时,则不允许自启动。 这个文件里的配置仅仅起一个开关的作用,其并不会具体的执行启动和关闭,具体的操作由$ORACLE_HOME/bin/dbstart和dbshut 脚本来实现。 这2个脚本在执行时会检查/etc/oratab 文件里的配置,为Y时才能继续执行。

 

所以配置数据库自启动和关闭的步骤如下:

(1)    配置/etc/oratab

(2)    修改$ORACLE_HOME/bin/dbstart和dbshut,并将其添加到/etc/rc(.local) 文件中。

 

这里是使用oracle 自带的dbstart 和dbshut脚本,如果使用自己写的脚本来启动或关闭DB 就不需要关心这个文件的设置了。

 

二.$ORACLE_HOME/bin/dbstart,dbshut 说明

2.1 dbstart 脚本

gg1:/u01/app/oracle/product/11.2.0.3/db_1/bin>cat dbstart#!/bin/sh## $Id: dbstart.sh 22-may-2008.05:05:45arogers Exp $# Copyright (c) 1991, 2008, Oracle. Allrights reserved. # ##################################### usage: dbstart $ORACLE_HOME## This script is used tostart ORACLE from /etc/rc(.local).# It should ONLY beexecuted as part of the system boot procedure.## This script will start all databaseslisted in the oratab file# whose third field is a"Y".  If the third field is setto "Y" and# there is no ORACLE_SID for an entry (thefirst field is a *),# then this script will ignore that entry.--这里就是我们之前说的,这个仅启动/etc/oratab 文件中标记为Y的实例。## This script requires that ASMORACLE_SID's start with a +, and# that non-ASM instance ORACLE_SID's do notstart with a +.## If ASM instances are to be started withthis script, it cannot be used inside an rc*.d directory, and should be invokedfrom rc.local only. Otherwise, the CSS service may not be available yet, andthis script will block init from completing the boot cycle.--如果是ASM 实例,那么只能从rc.local中调用,否则CSS 服务可能不可用。## If you want dbstart to auto-start asingle-instance database that uses# an ASM server that is auto-started by CRS(this is the default behavior# for an ASM cluster), you must change thedatabase's ORATAB entry to use# a third field of "W" and theASM's ORATAB entry to use a third field of "N".# These values specify that dbstartauto-starts the database only after# the ASM instance is up and running.--注意这里的W,其表示等待所有的ASM 实例启动完毕后在启动数据库。## Note:# Use ORACLE_TRACE=T for tracing thisscript.## The progress log for each instancebringup plus Error and Warning message[s]# are logged in file $ORACLE_HOME/startup.log.The error messages related to# instance bringup are also logged tosyslog (system log module).# The Listener log is located at$ORACLE_HOME_LISTNER/listener.log--启动日志存放在$ORACLE_HOME/startup.log里。## On all UNIX platforms except SOLARIS# ORATAB=/etc/oratab## To configure, update ORATAB withInstances that need to be started up#   Entries are of the form:#   $ORACLE_SID:$ORACLE_HOME:<N|Y|W>:#   An example entry:#   main:/usr/lib/oracle/emagent_10g:Y## Overall algorithm:--启动顺序# 1) Bring up all ASM instances with 'Y'entry in status field in oratab entry--启动状态为Y的所有ASM 实例# 2) Bring up all Database instances with'Y' entry in status field in#   oratab entry--启动所有状态为Y的数据库实例# 3) If there are Database instances with'W' entry in status field#   then#     iterate over all ASM instances (irrespective of 'Y' or 'N') AND#     wait for all of them to be started#   fi--如果数据库的状态为W,则等待ASM 实例启动完毕,再启动# 4) Bring up all Database instances with'W' entry in status field in#   oratab entry--启动所有状态为W的数据库实例###################################### LOGMSG="logger -puser.alert -s " trap 'exit' 1 2 3 # for script tracingcase $ORACLE_TRACE in  T)set -x ;;esac   # Set path if path not set (if called from/etc/rc)SAVE_PATH=/bin:/usr/bin:/etc:${PATH} ;export PATHSAVE_LLP=$LD_LIBRARY_PATH # First argument is used to bring up OracleNet ListenerORACLE_HOME_LISTNER=$1if [ ! $ORACLE_HOME_LISTNER ] ; then echo "ORACLE_HOME_LISTNER is not SET, unable to auto-start OracleNet 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  # adifferent 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" >> $LOG2>&1   $ORACLE_HOME_LISTNER/bin/lsnrctl start >> $LOG 2>&1 &   VER10LIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep "LSNRCTLfor " | cut -d' ' -f5 | cut -d'.' -f1`   export VER10LIST else   echo "Failed to auto-start Oracle Net Listener using$ORACLE_HOME_LISTNER/bin/tnslsnr"  fifi # Set this in accordance with the platformORATAB=/etc/oratabif [ ! $ORATAB ] ; then echo "$ORATAB not found" exit 1;fi # Checks Version Mismatch between Listenerand Database Instance.# A version 10 listener is required for anOracle Database 10g database.# Previous versions of the listener are notsupported for use with an Oracle# Database 10g database. However, it ispossible to use a version 10 listener# with previous versions of the Oracledatabase.checkversionmismatch() {  if[ $VER10LIST ] ; then   VER10INST=`sqlplus -V | grep "Release " | cut -d' ' -f3 | cut-d'.' -f1`   if [ $VER10LIST -lt $VER10INST ] ; then     $LOGMSG "Listener version $VER10LIST NOT supported with Databaseversion $VER10INST"     $LOGMSG "Restart Oracle Net Listener using an alternateORACLE_HOME_LISTNER:"     $LOGMSG "lsnrctl start"   fi  fi} # Starts a DatabaseInstancestartinst() {  #Called programs use same database ID export ORACLE_SID   #Put $ORACLE_HOME/bin into PATH and export. PATH=$ORACLE_HOME/bin:${SAVE_PATH} ; export PATH  #add for bug # 652997 LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${SAVE_LLP} ; 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"  fi  if[ -f $ORACLE_HOME/dbs/sgadef${ORACLE_SID}.ora ] ; then   STATUS="-1"  fi pmon=`ps -ef | grep -w "ora_pmon_$ORACLE_SID"  | grep -v grep`  if[ "$pmon" != "" ] ; then   STATUS="-1"   $LOGMSG "Warning: ${INST} \"${ORACLE_SID}\" alreadystarted."  fi   if[ $STATUS -eq -1 ] ; then   $LOGMSG "Warning: ${INST} \"${ORACLE_SID}\" possibly leftrunning when system went down (system crash?)."   $LOGMSG "Action: Notify Database Administrator."   case $VERSION in     "6")  sqldba"command=shutdown abort" ;;     "internal")  $SQLDBA$args <<EOFconnect internalshutdown abortEOF       ;;     *)  $SQLDBA $args <<EOFconnect / as sysdbashutdown abortquitEOF       ;;   esac    if [ $? -eq 0 ] ; then     STATUS=1   else     $LOGMSG "Error: ${INST} \"${ORACLE_SID}\" NOTstarted."   fi  fi   if[ $STATUS -eq 1 ] ; then   if [ -e $SPFILE -o -e $SPFILE1 -o -e $PFILE ] ; then     case $VERSION in       "6")  sqldbacommand=startup ;;       "internal")  $SQLDBA<<EOFconnect internalstartupEOF         ;;       *)  $SQLDBA <<EOFconnect / as sysdbastartupquitEOF         ;;     esac      if [ $? -eq 0 ] ; then       echo ""        echo "$0: ${INST}\"${ORACLE_SID}\" warm started."     else       $LOGMSG ""       $LOGMSG "Error: ${INST} \"${ORACLE_SID}\" NOTstarted."     fi   else     $LOGMSG ""     $LOGMSG "No init file found for ${INST}\"${ORACLE_SID}\"."     $LOGMSG "Error: ${INST} \"${ORACLE_SID}\" NOTstarted."   fi  fi} # Starts an ASM Instancestartasminst() {  #Called programs use same database ID export ORACLE_SID ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`  #Called scripts use same home directory export ORACLE_HOME   #For ASM instances, we have a dependency on the CSS service.  #Wait here for it to become available before instance startup.   #Is the 10g install intact? Are all necessary binaries present?  if[ ! -x $ORACLE_HOME/bin/crsctl ]; then   $LOGMSG "$ORACLE_HOME/bin/crsctl not found when attempting tostart"   $LOGMSG "  ASM instance$ORACLE_SID."  else   COUNT=0   $ORACLE_HOME/bin/crsctl check css   RC=$?   while [ "$RC" != "0" ];     do     COUNT=`expr $COUNT + 1`     if [ $COUNT = 15 ] ; then       # 15 tries with 20 sec interval => 5 minutes timeout       $LOGMSG "Timed out waiting to start ASM instance$ORACLE_SID"               $LOGMSG "  CSS service is NOTavailable."        exit $COUNT     fi     $LOGMSG "Waiting for Oracle CSS service to be available beforestarting "     $LOGMSG " ASM instance $ORACLE_SID. Wait $COUNT."     sleep 20     $ORACLE_HOME/bin/crsctl check css     RC=$?   done  fi startinst} # Start of dbstartupscript## Loop for every entry in oratab file andand try to start# that ORACLE.## ASM instances need to be started before'Database instances'# ASM instance is identified with '+'prefix in ORACLE_SID# Following loop brings up ASM instance[s] cat $ORATAB | while read LINEdocase $LINE in \#*)                ;;        #comment-line in oratab  *) ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  if[ "$ORACLE_SID" = '*' ] ; then    #same as NULL SID - ignore this entry   ORACLE_SID=""   continue  fi  #Proceed only if last field is 'Y'.  if[ "`echo $LINE | awk -F: '{print $NF}' -`" = "Y" ] ; then    #If ASM instances   if [ `echo $ORACLE_SID | cut -b 1` = '+' ]; then     INST="ASM instance"     ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`     # Called scripts use same home directory     export ORACLE_HOME     # file for logging script's output     LOG=$ORACLE_HOME/startup.log     touch $LOG     chmod a+r $LOG     echo "Processing $INST \"$ORACLE_SID\": log file$ORACLE_HOME/startup.log"     startasminst >> $LOG 2>&1   fi  fi  ;;esacdone # exit if there was any trouble bringing upASM instance[s]if [ "$?" != "0" ] ;then exit 2fi ## Following loop brings up 'Database instances'#cat $ORATAB | while read LINEdocase $LINE in \#*)                ;;        #comment-line in oratab  *) ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  if[ "$ORACLE_SID" = '*' ] ; then    #same as NULL SID - ignore this entry    ORACLE_SID=""   continue  fi  #Proceed only if last field is 'Y'.  if[ "`echo $LINE | awk -F: '{print $NF}' -`" = "Y" ] ; then    #If non-ASM instances   if [ `echo $ORACLE_SID | cut -b 1` != '+' ]; then     INST="Database instance"     ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`     # Called scripts use same home directory     export ORACLE_HOME     # file for logging script's output     LOG=$ORACLE_HOME/startup.log     touch $LOG     chmod a+r $LOG     echo "Processing $INST \"$ORACLE_SID\": log file$ORACLE_HOME/startup.log"     startinst >> $LOG 2>&1   fi  fi  ;;esacdone ## Following loop brings up 'Databaseinstances' that have wait state 'W'#cat $ORATAB | while read LINEdocase $LINE in \#*)                ;;        #comment-line in oratab  *) ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  if[ "$ORACLE_SID" = '*' ] ; then    #same as NULL SID - ignore this entry   ORACLE_SID=""   continue  fi  #Proceed only if last field is 'W'.  if[ "`echo $LINE | awk -F: '{print $NF}' -`" = "W" ] ; then   W_ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`    #DB instances with 'W' (wait state) have a dependency on ASM instances via CRS.    #Wait here for 'all' ASM instances to become available.   cat $ORATAB | while read LINE   do   case $LINE in     \#*)                ;;        #comment-line in oratab     *)     ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`     if [ "$ORACLE_SID" = '*' ] ; then       # same as NULL SID - ignore this entry       ORACLE_SID=""       continue     fi     if [ `echo $ORACLE_SID | cut -b 1` = '+' ]; then       INST="ASM instance"       ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`       if [ -x $ORACLE_HOME/bin/srvctl ] ; then         COUNT=0         NODE=`olsnodes -l`         RNODE=`srvctl status asm -n $NODE | grep "$ORACLE_SID isrunning"`         RC=$?         while [ "$RC" != "0" ]; # wait until this comes up!         do           COUNT=$((COUNT+1))           if [ $COUNT = 5 ] ; then              # 5 tries with 60 sec interval=> 5 minutes timeout              $LOGMSG "Error: Timed outwaiting on CRS to start ASM instance $ORACLE_SID"                      exit $COUNT           fi           $LOGMSG "Waiting for Oracle CRS service to start ASM instance$ORACLE_SID"           $LOGMSG "Wait $COUNT."           sleep 60           RNODE=`srvctl status asm -n $NODE | grep "$ORACLE_SID isrunning"`           RC=$?         done       else         $LOGMSG "Error: \"${W_ORACLE_SID}\" has dependency on ASMinstance \"${ORACLE_SID}\""         $LOGMSG "Error: Need $ORACLE_HOME/bin/srvctl to check thisdependency"       fi     fi     # asm instance     ;;    esac   done # innner while  fi  ;;esacdone # outer while # by now all the ASM instances have come upand we can proceed to bring up# DB instance with 'W' wait status cat $ORATAB | while read LINEdocase $LINE in \#*)                ;;        #comment-line in oratab  *) ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  if[ "$ORACLE_SID" = '*' ] ; then    #same as NULL SID - ignore this entry   ORACLE_SID=""   continue  fi  #Proceed only if last field is 'W'.  if[ "`echo $LINE | awk -F: '{print $NF}' -`" = "W" ] ; then   INST="Database instance"   if [ `echo $ORACLE_SID | cut -b 1` = '+' ]; then     $LOGMSG "Error: ${INST} \"${ORACLE_SID}\" NOTstarted"     $LOGMSG "Error: incorrect usage: 'W' not allowed for ASMinstances"     continue   fi   ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`    #Called scripts use same home directory   export ORACLE_HOME    #file for logging script's output   LOG=$ORACLE_HOME/startup.log   touch $LOG    chmod a+r $LOG   echo "Processing $INST \"$ORACLE_SID\": log file$ORACLE_HOME/startup.log"   startinst >> $LOG 2>&1  fi  ;;esacdonegg1:/u01/app/oracle/product/11.2.0.3/db_1/bin>
 


2.2 dbshut 脚本

gg1:/u01/app/oracle/product/11.2.0.3/db_1/bin>cat dbshut#!/bin/sh## $Id: dbshut.sh 22-may-2008.05:19:31arogers Exp $# Copyright (c) 1991, 2008, Oracle. Allrights reserved. # ##################################### usage: dbshut $ORACLE_HOME## This script is used to shutdown ORACLEfrom /etc/rc(.local).# It should ONLY be executed as part of thesystem boot procedure.## This script will shutdown all databaseslisted in the oratab file# whose third field is a "Y" or"W".  If the third field is setto "Y" and# there is no ORACLE_SID for an entry (thefirst field is a *),# then this script will ignore that entry.## This script requires that ASMORACLE_SID's start with a +, and# that non-ASM instance ORACLE_SID's do notstart with a +.## Note:# Use ORACLE_TRACE=T for tracing this script.# Oracle Net Listener is also shutdownusing this script.## The progress log for each instanceshutdown is logged in file# $ORACLE_HOME/shutdown.log.## On all UNIX platforms except SOLARIS# ORATAB=/etc/oratab## To configure, update ORATAB withInstances that need to be shutdown#   Entries are of the form:#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:#   An example entry:#   main:/usr/lib/oracle/emagent_10g:Y###################################### trap 'exit' 1 2 3case $ORACLE_TRACE in  T) set-x ;;esac # Set path if path not set (if called from/etc/rc)SAVE_PATH=/bin:/usr/bin:/etc:${PATH} ;export PATHSAVE_LLP=$LD_LIBRARY_PATH # The this to bring down Oracle Net ListenerORACLE_HOME_LISTNER=$1if [ ! $ORACLE_HOME_LISTNER ] ; then  echo"ORACLE_HOME_LISTNER is not SET, unable to auto-stop Oracle NetListener" 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  # adifferent ORACLE_HOME for each entry in the oratab. export ORACLE_HOME=$ORACLE_HOME_LISTNER   #Stop Oracle Net Listener  if[ -f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then   echo "$0: Stoping Oracle Net Listener" >> $LOG2>&1   $ORACLE_HOME_LISTNER/bin/lsnrctl stop >> $LOG 2>&1 & else   echo "Failed to auto-stop Oracle Net Listener using$ORACLE_HOME_LISTNER/bin/tnslsnr"  fifi # Set this in accordance with the platformORATAB=/etc/oratabif [ ! $ORATAB ] ; then echo "$ORATAB not found" exit 1;fi # Stops an instancestopinst() { ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  if[ "$ORACLE_SID" = '*' ] ; then   ORACLE_SID=""  fi# Called programs use same database ID export ORACLE_SID ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`# Called scripts use same home directory export ORACLE_HOME# Put $ORACLE_HOME/bin into PATH andexport. PATH=$ORACLE_HOME/bin:${SAVE_PATH} ; export PATH# add for bug 652997 LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${SAVE_LLP} ; export LD_LIBRARY_PATH PFILE=${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora # 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  case $VERSION in   "6")  sqldbacommand=shutdown ;;   "internal")  $SQLDBA<<EOFconnect internalshutdown immediateEOF    ;;    *)  $SQLDBA <<EOFconnect / as sysdbashutdown immediatequitEOF    ;; esac   iftest $? -eq 0 ; then   echo "${INST} \"${ORACLE_SID}\" shut down." else   echo "${INST} \"${ORACLE_SID}\" not shut down."  fi} ## Loop for every entry in oratab file andand try to shut down# that ORACLE## Following loop shuts down 'DatabaseInstance[s]' with 'Y' entry cat $ORATAB | while read LINEdo case $LINE in \#*)                ;;        #comment-line in oratab  *) ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  if[ "$ORACLE_SID" = '*' ] ; then     # NULL SID - ignore     ORACLE_SID=""     continue  fi  #Proceed only if last field is 'Y' or 'W'  if[ "`echo $LINE | awk -F: '{print $NF}' -`" = "Y" ] ; then   if [ `echo $ORACLE_SID | cut -b 1` != '+' ]; then     INST="Database instance"     ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`     LOG=$ORACLE_HOME/shutdown.log     echo "Processing $INST \"$ORACLE_SID\": log file$LOG"     stopinst >> $LOG 2>&1   fi  fi  ;; esacdone ## Following loop shuts down 'DatabaseInstance[s]' with 'W' entry#cat $ORATAB | while read LINEdo case $LINE in \#*)                ;;        #comment-line in oratab  *) ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  if[ "$ORACLE_SID" = '*' ] ; then     # NULL SID - ignore     ORACLE_SID=""     continue  fi  #Proceed only if last field is 'Y' or 'W'  if[ "`echo $LINE | awk -F: '{print $NF}' -`" = "W" ] ; then   if [ `echo $ORACLE_SID | cut -b 1` != '+' ]; then     INST="Database instance"     ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`     LOG=$ORACLE_HOME/shutdown.log     echo "Processing $INST \"$ORACLE_SID\": log file$LOG"     stopinst >> $LOG 2>&1   fi  fi  ;; esacdone ## Following loop shuts down 'ASMInstance[s]'# cat $ORATAB | while read LINEdo  case$LINE in   \#*)                ;;        #comment-line in oratab   *)   ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`   if [ "$ORACLE_SID" = '*' ] ; then     # NULL SID - ignore     ORACLE_SID=""     continue   fi    #Proceed only if last field is 'Y'.    #Entries whose last field is not Y or N are not DB entry, ignore them.   if [ "`echo $LINE | awk -F: '{print $NF}' -`" = "Y"] ; then     if [ `echo $ORACLE_SID | cut -b 1` = '+' ]; then       INST="ASM instance"       ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`       LOG=$ORACLE_HOME/shutdown.log       echo "Processing $INST \"$ORACLE_SID\": log file$LOG"       stopinst >> $LOG 2>&1     fi   fi  ;; esacdonegg1:/u01/app/oracle/product/11.2.0.3/db_1/bin>

通过以上信息,我们可以看出,我们只需要修改/etc/oratab脚本就可以了,dbstart 和dbshut命令可以从/etc/oratab里获取需要的参数值。

 

三.DB 开机自启动示例

3.1 修改/etc/oratab的值为Y

gg1:/u01/app/oracle/product/11.2.0.3/db_1/bin>ll /etc/oratab

-rw-rw-r-- 1 oracle oinstall 722 Jan 3020:36 /etc/oratab

gg1:/u01/app/oracle/product/11.2.0.3/db_1/bin>cat /etc/oratab

#

gg1:/u01/app/oracle/product/11.2.0.3/db_1:Y

 

3.2 修改dbstart的ORACLE_HOME_LISTNER,使其指向$ORACLE_HOME:

# First argument is used to bring up OracleNet Listener

ORACLE_HOME_LISTNER=$ORACLE_HOME

 

3.3  用root用户在rc.local里添加如下内容:

 

[root@gg1 ~]# cat /etc/rc.local  

#!/bin/sh

#

# This script will be executed *after* allthe other init scripts.

# You can put your own initialization stuffin here if you don't

# want to do the full Sys V style initstuff.

 

touch /var/lock/subsys/local

su - oracle -c"/u01/app/oracle/product/11.2.0.3/db_1/bin/dbstart"

su - oracle -c"/u01/app/oracle/product/11.2.0.3/db_1/bin/emctl start dbconsole"

 

这里注意必须用oracle 用户来启动脚本。

 

3.4 reboot 系统,Oracle就自动启动了。

 

在我们的配置中,启动的包括监听,实例和OEM。

 

启动日志如下:

gg1:/u01/app/oracle/product/11.2.0.3/db_1>cat startup.log

 

/u01/app/oracle/product/11.2.0.3/db_1/bin/dbstart:Starting up database "gg1"

Mon Jan 30 20:48:26 CST 2012

 

 

SQL*Plus: Release 11.2.0.3.0 Production onMon Jan 30 20:48:31 2012

 

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

 

SQL> Connected to an idle instance.

SQL> ORACLE instance started.

 

Total System Global Area  939495424 bytes

Fixed Size                  2233960 bytes

Variable Size             675285400 bytes

Database Buffers          255852544 bytes

Redo Buffers                6123520 bytes

Database mounted.

Database opened.

SQL> Disconnected from Oracle Database11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, OLAP, Data Mining andReal Application Testing options

 

/u01/app/oracle/product/11.2.0.3/db_1/bin/dbstart:Database instance "gg1" warm started.

 

 

gg1:/u01/app/oracle/product/11.2.0.3/db_1>cat listener.log

/u01/app/oracle/product/11.2.0.3/db_1/bin/dbstart:Starting Oracle Net Listener

 

LSNRCTL for Linux: Version 11.2.0.3.0 -Production on 30-JAN-2012 21:24:37

 

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

 

Starting /u01/app/oracle/product/11.2.0.3/db_1/bin/tnslsnr:please wait...

 

TNSLSNR for Linux: Version 11.2.0.3.0 -Production

System parameter file is/u01/app/oracle/product/11.2.0.3/db_1/network/admin/listener.ora

Log messages written to/u01/app/oracle/diag/tnslsnr/gg1/listener/alert/log.xml

Listening on:(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=gg1)(PORT=1521)))

Listening on:(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

 

Connecting to(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=gg1)(PORT=1521)))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version11.2.0.3.0 - Production

Start Date                30-JAN-2012 21:24:40

Uptime                    0 days 0 hr. 0 min. 1 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File  /u01/app/oracle/product/11.2.0.3/db_1/network/admin/listener.ora

Listener Log File         /u01/app/oracle/diag/tnslsnr/gg1/listener/alert/log.xml

Listening Endpoints Summary...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=gg1)(PORT=1521)))

 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

The listener supports no services

The command completed successfully

 

 

 

 

 

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

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

Email:   tianlesoftware@gmail.com

Skype: tianlesoftware

Blog:     http://www.tianlesoftware.com

Weibo: http://weibo.com/tianlesoftware

Twitter: http://twitter.com/tianlesoftware

Facebook:http://www.facebook.com/tianlesoftware

 

-------加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请----

DBA1 群:62697716(满);   DBA2 群:62697977(满)  DBA3 群:62697850(满)  

DBA 超级群:63306533(满);  DBA4 群:83829929   DBA5群: 142216823

DBA6 群:158654907    DBA7 群:172855474     DBA总群:104207940