Auto Startup And Shutdown
設定方法

起動停止スクリプトを確認した上
dboraスクリプトを/etc/init.d/dboraに配置し、権限とオーナーを正しく直して、chkconfigでサービスをインストールする。

chkconfig --add dbora
chkconfig --list dbora
dboraスクリプト
#!/bin/sh
 
#
# chkconfig: - 99 10
# description: Oracle Database Server
# processname: ora_
#
# dbora This shell script takes care of starting and stopping
# Oracle Database Server.
 
# /etc/init.d/dbora
 
SUBSYS=/var/lock/subsys/dbora
dbora_init() {
        # get ORACLE_HOME from the first entry,
        # whose 3rd field is Y, in /etc/oratab.
        if [ ! -f /etc/oratab ]
        then
                echo "auto startup/shudown of Oracle: /etc/oratab does not exist."
                exit 1
        fi
        ORA_HOME=`awk -F: '/^[^#:]+:.+:[Y]$/ { print $2; exit}' /etc/oratab`
        if [ x$ORA_HOME = "x" ]; then
                echo "There is not Y entry in /etc/oratab."
                exit 1
        fi
        # get oracle's owner from owner of dbstart.
        if [ ! -f $ORA_HOME/bin/dbstart ]
        then
                echo "auto startup/shudown of Oracle: Oracle may not be installed" \
                "correctly."
                exit 1
        fi
        ORA_OWNER=`ls -l $ORA_HOME/bin/dbstart | awk '{print $3}'`
}
 
case "$1" in
'start')
        if [ -f $SUBSYS ]; then
                echo $0 alredy started.
                exit 1
        fi
        dbora_init
        # Start the Oracle databases:
        su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart"
        su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
        # Start Intelligent Agent and Oracle Management Server
        # --- for Oracle9i ---
        # su - $ORA_OWNER -c "$ORA_HOME/bin/agentctl start"
        # su - $ORA_OWNER -c "$ORA_HOME/bin/oemctl start oms"
        # --- for Oracle8i ---
        # su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl dbsnmp_start"
        # su - $ORA_OWNER -c "$ORA_HOME/bin/oemctrl start oms"
        # --------------------
        # Start the Oracle HTTP Server
        # This is a BUG workaround. $ORACLE_HOME/Apache/Jserv/etc
        # /jserv.properties needs DISPLAY.
        # test -z "$DISPLAY" && export DISPLAY=":60000.0"
        # su - $ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl start"
        # --------------------
        touch $SUBSYS
        ;;
'stop')
        if [ ! -f $SUBSYS ]; then
                echo $0 alredy stopped.
                exit 1
        fi
        dbora_init
        # Stop Intelligent Agent
        # --- for Oracle9i ---
        # su - $ORA_OWNER -c "$ORA_HOME/bin/agentctl stop"
        # --- for Oracle8i ---
        # su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl dbsnmp_stop"
        # --------------------
        # Stop the Oracle HTTP Server
        # su - $ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl stop"
        # --------------------
        # Stop the Oracle databases:
        su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
        su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut"
        rm -f $SUBSYS
        ;;
'restart')
        $0 stop
        $0 start
        ;;
        'status')
        if [ -f $SUBSYS ]; then
                echo $0 started.
                else
                echo $0 stopped.
        fi
        ;;
*)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        esac
        exit 0
起動設定
#
# $Header: dbstart.sh.pp 03-apr-2001.13:38:21 jboyce Exp $ dbstart.sh.pp Copyr (c) 1991 Oracle
#
 
###################################
#
# usage: dbstart
#
# This script is used to start ORACLE from /etc/rc(.local).
# It should ONLY be executed as part of the system boot procedure.
#
#####################################
 
ORATAB=/etc/oratab
 
trap 'exit' 1 2 3
case $ORACLE_TRACE in
    T) set -x ;;
esac
 
# Set path if path not set (if called from /etc/rc)
case $PATH in
    "") PATH=/bin:/usr/bin:/etc
        export PATH ;;
esac
# Save LD_LIBRARY_PATH
SAVE_LLP=$LD_LIBRARY_PATH
 
#
# Loop for every entry in oratab file and and try to start
# that ORACLE
#
 
cat $ORATAB | while read LINE
do
    case $LINE in
        \#*)                ;;        #comment-line in oratab
        *)
#       Proceed only if third field is 'Y'.
        if [ "`echo $LINE | awk -F: '{print $3}' -`" = "Y" ] ; then
            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 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/spfile${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
 
            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 | egrep pmon_$ORACLE_SID  | grep -v grep`
            if [ "$pmon" != "" ];
            then
                STATUS="-1"
                echo "Database \"${ORACLE_SID}\" already started."
            fi
 
            if test $STATUS -eq -1 ; then
                echo ""
                echo "Database \"${ORACLE_SID}\" possibly left running when system went down (system crash?)."
                echo "Notify Database Administrator."
                case $VERSION in
                    "6")  sqldba "command=shutdown abort" ;;
                    "internal")  $SQLDBA $args <<EOF
connect internal
shutdown abort
EOF
                        ;;
                    *)  $SQLDBA $args <<EOF
connect /as sysdba
shutdown abort
EOF
                        ;;
                esac
                if test $? -eq 0 ; then
                    STATUS=1
                else
                    echo "Database \"${ORACLE_SID}\" NOT started."
                fi
            fi
 
            if test $STATUS -eq 1 ; then
                if [ -f $PFILE ] ; then
                    case $VERSION in
                        "6")  sqldba command=startup ;;
                        "internal")  $SQLDBA <<EOF
connect internal
startup
EOF
                            ;;
                        *)  $SQLDBA <<EOF
connect / as sysdba
startup
EOF
                            ;;
                    esac
 
                    if test $? -eq 0 ; then
                        echo ""
                        echo "Database \"${ORACLE_SID}\" warm started."
                    else
                        echo ""
                        echo "Database \"${ORACLE_SID}\" NOT started."
                    fi
                else
                    echo ""
                    echo "Can't find init file for Database \"${ORACLE_SID}\"."
                    echo "Database \"${ORACLE_SID}\" NOT started."
                fi
            fi
        fi
        ;;
    esac
done
停止設定

ここで、もともとオラクル9iがインストールしたスクリプトを修正したところがある。
APサーバなど常に接続しているクライアントがあるため、
もともとのバージョンならシャットダウンができなくなるから

もともと: shutdown
修正: shutdown immediate

#
# $Header: dbshut.sh.pp 03-apr-2001.13:38:20 jboyce Exp $ dbshut.sh.pp Copyr (c) 1991 Oracle
#
 
###################################
#
# usage: dbshut
#
# This script is used to shutdown ORACLE from /etc/rc(.local).
# It should ONLY be executed as part of the system boot procedure.
#
#####################################
 
ORATAB=/etc/oratab
 
trap 'exit' 1 2 3
case $ORACLE_TRACE in
    T) set -x ;;
esac
 
# Set path if path not set (if called from /etc/rc)
case $PATH in
    "") PATH=/bin:/usr/bin:/etc
        export PATH ;;
esac
# Save LD_LIBRARY_PATH
SAVE_LLP=$LD_LIBRARY_PATH
 
#
# Loop for every entry in oratab file and and try to shut down
# that ORACLE
#
 
cat $ORATAB | while read LINE
do
    case $LINE in
        \#*) ;;        #comment-line in oratab
        *)
#       Proceed only if third field is 'Y'.
        if [ "`echo $LINE | awk -F: '{print $3}' -`" = "Y" ] ; then
            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 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
 
#            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")  sqldba command=shutdown ;;
                  "internal")  $SQLDBA <<EOF
connect internal
shutdown immediate
EOF
                    ;;
                  *)  $SQLDBA <<EOF
connect / as sysdba
shutdown immediate
EOF
                    ;;
              esac
 
            if test $? -eq 0 ; then
                echo "Database \"${ORACLE_SID}\" shut down."
            else
                echo "Database \"${ORACLE_SID}\" not shut down."
            fi
        fi
        ;;
    esac
done