[置顶] How to Automate Startup/Shutdown of Oracle Database on Linux [ID 222813.1]

How to Automate Startup/Shutdown of Oracle Database on Linux [ID 222813.1]
  Modified 22-NOV-2010     Type BULLETIN     Status PUBLISHED  

In this Document
  Purpose
  Scope and Application
  How to Automate Startup/Shutdown of Oracle Database on Linux
  References

Applies to:

Oracle Server - Enterprise Edition - Version: 8.0.3.0 to 10.1.0.2 - Release: 8.0.3 to 10.1
Linux OS - Version: 2.4 to 2.6]
Linux x86
Linux x86-64
Linux Itanium
Linux Kernel - Version: 2.4 to 2.6
This document applies to:
SLES7, SLES8, SLES9, SLES10
RHAS 2.1, RHEL 3,4,5, OEL 4,5

***Checked for relevance on 22-November-2010***

Purpose

This document aims to demonstrate automatic startup and shutdown of Oracle databases on Linux. 

Scope and Application

The information in this document is useful for system administrators and database administrators trying to automate Oracle database startup and shutdown. The document describes the detailed steps for configuration on Red Hat Advanced Server 2.1, RedHat Enterprise Linux (RHEL) 3,4,5, SuSE SLES7, United Linux 1.0 (SuSE SLES8 Edition), SLES9, SLES10, Oracle Enterprise Linux (OEL) 4,5.  The information may not apply to other Linux distributions.

The following configuration is done to allow Oracle database be up and running in runlevels 3 (character mode) and 5 (X-Window system) and the start / stop commands does not provide the exhaustive list of all possibilities and it presents an example. Therefore the exact scripts may not work with your configuration

Since the configuration is based on dbstart and dbshut scripts provided by the Oracle Server installation, please see  Note 207508.1

The configuration also facilitates automated startup shutdown of Intelligent Agent, Management Server and HTTP Server, which are available with Oracle Server.

The information in this document does not apply to Oracle Internet Application Server. Still the script can be configured to handle starting up and shutting  down iAS processes. 

How to Automate Startup/Shutdown of Oracle Database on Linux


1. Update 'oratab' (under /etc or /var/opt/oracle) as:

   <SID>:<ORACLE_HOME>:Y
where Y states that the database can be started up and shutdown using 
dbstart/dbshut.

2. Create the service script:

     /etc/init.d/dbora
Note: In Red Hat Advanced Server 2.1, the /etc/init.d is is a symbolic link to  /etc/rc.d/init.d 

Content of the script is as follows:

#!/bin/bash
  #
  # chkconfig: 2345 99 10   
  # description: Starts and stops Oracle processes
  #
  # Set ORA_HOME to be equivalent to the $ORACLE_HOME
  # from which you wish to execute dbstart and dbshut;
  #
  # Set ORA_OWNER to the user id of the owner of the
  # Oracle database in ORA_HOME.
  #
  ORA_HOME=<Type your ORACLE_HOME in full path here>
  ORA_OWNER=<Type your Oracle account name here>

  case "$1" in
    'start')
       # Start the TNS Listener
       su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
       # Start the Oracle databases:
       # The following command assumes that the oracle login
       # will not prompt the user for any values
       su - $ORA_OWNER -c $ORA_HOME/bin/dbstart
       # Start the Intelligent Agent
       if [ -f $ORA_HOME/bin/emctl ]; then
          su - $ORA_OWNER -c "$ORA_HOME/bin/emctl start agent"
       elif [ -f $ORA_HOME/bin/agentctl ]; then
          su - $ORA_OWNER -c "$ORA_HOME/bin/agentctl start"
       else
          su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl dbsnmp_start"
       fi
       # Start Management Server
       if [ -f $ORA_HOME/bin/emctl ]; then
          su - $ORA_OWNER -c "$ORA_HOME/bin/emctl start dbconsole"
       elif [ -f $ORA_HOME/bin/oemctl ]; then
          su - $ORA_OWNER -c "$ORA_HOME/bin/oemctl start oms"
       fi
       # Start HTTP Server
       if [ -f $ORA_HOME/Apache/Apache/bin/apachectl ]; then
          su - $ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl start"
       fi
       touch /var/lock/subsys/dbora
       ;;
    'stop')
       # Stop HTTP Server
       if [ -f $ORA_HOME/Apache/Apache/bin/apachectl ]; then
          su - $ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl stop"
       fi
       # Stop the TNS Listener
       su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
       # Stop the Oracle databases:
       # The following command assumes that the oracle login
       # will not prompt the user for any values
       su - $ORA_OWNER -c $ORA_HOME/bin/dbshut
       rm -f /var/lock/subsys/dbora
       ;;
  esac
  # End of script dbora

or


#! /bin/sh
#
# MEmes: 03/07/2011: Oracle SysV script
#
# chkconfig: 2345 98 2
# description: Oracle database start/stop script

### BEGIN INIT INFO
# Provides:             oracle
# Required-Start:       $network
# Required-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Oracle database start/stop script
# Description:          Automatically starts/stops oracle instance
### END INIT INFO

ORACLE_USER=${ORACLE_USER:-oracle}
ORACLE_SID=${ORACLE_SID:-oracle}
ORAENV_ASK=NO
PATH=/usr/local/bin:/usr/bin:/bin
[ -r /usr/local/bin/oraenv ] &&     . /usr/local/bin/oraenv > /dev/null 2>/dev/null

. /etc/rc.d/init.d/functions

prep ()
{
    # Test for valid ORACLE_HOME
    if [ ! -d "${ORACLE_HOME}" ]; then
        failure $"ORACLE_HOME is not a valid directory: ${ORACLE_HOME}"
        echo
        exit 1
    fi
    # Test for SQL*Plus executable
    SQLPLUS=${SQLPLUS:-"${ORACLE_HOME}/bin/sqlplus"}
    if [ ! -x "${SQLPLUS}" ]; then
        failure $"Cannot locate SQL*Plus executable: ${SQLPLUS}"
        echo
        exit 1
    fi
    # Test for lsnrctl executable
    LSNRCTL=${LSNRCTL:-"${ORACLE_HOME}/bin/lsnrctl"}
    if [ ! -x "${LSNRCTL}" ]; then
        failure $"Cannot locate lsnrctl executable: ${LSNRCTL}"
        echo
        exit 1
    fi
    return 0
}

startup ()
{
    # Modify network to reflect current hostname
    #sed -i -e "s/HOST = [^)]*/HOST = $(hostname -f)/g" ${ORACLE_HOME}/network/admin/tnsnames.ora
    #sed -i -e "s/HOST = [^)]*/HOST = $(hostname -f)/g" ${ORACLE_HOME}/network/admin/listener.ora
    # Start Oracle database and listener
    echo -n $"Starting Oracle DB: "
    su -c "${SQLPLUS} /nolog" ${ORACLE_USER} > /dev/null 2>&1 <<EOF
connect / as sysdba
startup
exit
EOF
    success
    echo
    echo -n $"Starting Oracle Listener: "
    su -c "${LSNRCTL} start" ${ORACLE_USER} > /dev/null 2>&1
    success
    echo
}

shutdown ()
{
    # Shutdown Oracle listener and database
    echo -n $"Stopping Oracle Listener: "
    su -c "${LSNRCTL} stop" ${ORACLE_USER} > /dev/null 2>&1
    success
    echo
    echo -n $"Stopping Oracle DB: "
    su -c "${SQLPLUS} /nolog" ${ORACLE_USER} > /dev/null 2>&1 <<EOF
connect / as sysdba
shutdown immediate
exit
EOF
    success
    echo
}

case "$1" in
    start)
        # Oracle listener and instance startup
        prep
        startup
        ;;
    stop)
        # Oracle listener and instance shutdown
        prep
        shutdown
        ;;
    reload|restart)
        prep
        shutdown
        startup
        ;;
    *)
        echo "Usage: $(basename $0) start|stop|restart|reload"
        exit 1
esac

exit 0



NOTE1:

The lines:

  # chkconfig: 35 99 10   
  # description: Starts and stops Oracle database
are mandatory since they describe the characteristics of the service where:
  • 35 means that the service will be started in init levels 3 and 5 and will be  stopped in other levels.
  • 99 means that the service will be started at the near end of the init level processing
  • 10 means that the service will be stopped at the near beginning of the init level processing
NOTE 2: 
The Management Server is not shut down during service stop since it requires interaction and there is no harm in system killing the processes since the database is shut down already.

3. Set script permissions:

    chmod 755 /etc/init.d/dbora

4. Register the Service

    /sbin/chkconfig --add dbora

This action registers the service to the Linux service mechanism. On SuSE SLES7 and Red Hat Advanced Server 2.1 it will arrange symbolic links under rc<runlevel>.d directories to /etc/init.d/dbora script.

The above configuration applies also to RHEL 3,4,5 and OEL 4.5.


Finished!


NOTE 3:
The chkconfig utility calls 'insserv' to register and add services. The 'insserv' version shipped with SUSE SLES8, SLES9 and SLES10 is using the following header to define run level and start/shutdown order.
    ### BEGIN INIT INFO
    # Provides:       dbora      
    # Required-Start: $local_fs $remote_fs $netdaemons
    # Required-Stop:
    # Default-Start:  3 5
    # Default-Stop:   0 1 2 3 4 5 6
    # Description:    Oracle Startup
    ### END INIT INFO
On SuSE SLES7 the following symbolic links are created:
  • /etc/init.d/rc0.d/K10dbora
  • /etc/init.d/rc1.d/K10dbora
  • /etc/init.d/rc2.d/K10dbora
  • /etc/init.d/rc3.d/S99dbora
  • /etc/init.d/rc4.d/K10dbora
  • /etc/init.d/rc5.d/S99dbora
  • /etc/init.d/rc6.d/K10dbora
On Red Hat Advanced Server 2.1 the following symbolic links are created:
  • /etc/rc.d/rc0.d/K10dbora
  • /etc/rc.d/rc1.d/K10dbora
  • /etc/rc.d/rc2.d/K10dbora
  • /etc/rc.d/rc3.d/S99dbora
  • /etc/rc.d/rc4.d/K10dbora
  • /etc/rc.d/rc5.d/S99dbora
  • /etc/rc.d/rc6.d/K10dbora
The symbolic links are not created in SLES8 and after  with the 'chkconfig -add' command. To have the symbolic links created run the following in addition:
   /sbin/chkconfig --set dbora 35
After this action, the following symbolic links will be created pointing to /etc/init.d/dbora script:
  • /etc/init.d/rc3.d/S01dbora
  • /etc/init.d/rc3.d/K22dbora
  • /etc/init.d/rc5.d/S01dbora
  • /etc/init.d/rc5.d/K22dbora
In all cases, the 'dbora' service will be running in runlevels 3,5 and it will be stopped in other runlevels (i.e. 0,1,2,4,6).

NOTE 4:
The script in this document assumes that:
  • ORACLE_HOME and other required environment settings are done in the login script of ORA_OWNER
  • There is no auto-running script like multiple ORACLE_HOME selection in the login profile of ORA_OWNER
NOTE 5:
If SELinux is enabled use "sudo su" instead of "su" in the dbora script. See  Note 357906.1

References

NOTE:1016388.102  - LINUX: DBSHUT FAILS WHEN ISSUING REBOOT, INIT6, OR SHUTDOWN.
NOTE:1074016.6  - 'dbora' does Not Work on RedHat Linux
NOTE:126146.1  - Customizing System Startup in RedHat Linux
NOTE:207508.1  - Dbstart does not work if using an spfile only
NOTE:357906.1  - Automated Database Startup Fails When SELinux Is Enabled
Linux man page: chkconfig (8)
Linux man page: chmod (1)
Linux man page: init.d (7)
Linux man page: ln (1)

 Related

Products
  • Oracle Database Products > Oracle Database > Oracle Database > Oracle Server - Enterprise Edition
  • Oracle Linux and Virtualization > Oracle Linux > Operating System > Linux OS
Keywords
START LISTENER; RUNLEVEL; INIT

你可能感兴趣的:(oracle,linux,server,service,database)