您的位置:首页 > 数据库 > Oracle

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

2012-01-06 16:29 645 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐