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.1Linux 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>:Ywhere Y states that the database can be started up and shutdown using
dbstart/dbshut.
2. Create the service script:
/etc/init.d/dboraNote: 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 databaseare 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
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
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./sbin/chkconfig --add dbora
The above configuration applies also to RHEL 3,4,5 and OEL 4.5.
Finished!
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 INFOOn 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
- /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
/sbin/chkconfig --set dbora 35After 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
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
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)
Products
|