In many cases after
installing Oracle DB on Linux servers, there is a need to configure it to start
automatically after OS reboot.
The automatic startup and shutdown of the
Oracle database can be achieved with the files dbstart and dbshut both provided
by Oracle. These files rely on the existance of the file /etc/oratab to work
(although by altering the dbshut and dbstart files this can be moved).
The format of the /etc/oratab file is as
follows:
SID:ORACLE_HOME:AUTO
An example:
orcl:/apps/oracle/product/<ora_ver>:Y
orcl1:/apps/oracle/product/<ora_ver>:N
To start and stop the database when the
machine comes up and goes down by modifying the startup routines for the Linux
machine. This is quite easy, although I should point out here that this may
change depending on which flavour of Linux (Slackware, Debian, RedHat, etc).
I will show examples which work for Redhat
Linux. To modify these for your own flavour of Linux, please see your Linux
documentation sets. (Although it should hold true for any Sys V type UNIX).
Firstly, we need to create the script which
will run dbshut and dbstart in the /etc/rc.d/init.d directory. Create the
following file as /etc/rc.d/init.d/oracle:
#!/bin/sh
#
# /etc/rc.d/init.d/oracle
# Description: Starts and stops the Oracle database and listeners
# See how we were called.
case "$1" in
start)
echo -n "Starting Oracle Databases: "
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Starting Oracle Databases as part of system up." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
su - oracle -c dbstart >> /var/log/oracle
echo "Done."
echo -n "Starting Oracle Listeners: "
su - oracle -c "lsnrctl start" >> /var/log/oracle
echo "Done."
echo ""
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
touch /var/lock/subsys/oracle
;;
stop)
echo -n "Shutting Down Oracle Listeners: "
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Shutting Down Oracle Databases as part of system down." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
su - oracle -c "lsnrctl stop" >> /var/log/oracle
echo "Done."
rm -f /var/lock/subsys/oracle
echo -n "Shutting Down Oracle Databases: "
su - oracle -c dbshut >> /var/log/oracle
echo "Done."
echo ""
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
;;
restart)
echo -n "Restarting Oracle Databases: "
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Restarting Oracle Databases as part of system up." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
su - oracle -c dbstop >> /var/log/oracle
su - oracle -c dbstart >> /var/log/oracle
echo "Done."
echo -n "Restarting Oracle Listeners: "
su - oracle -c "lsnrctl stop" >> /var/log/oracle
su - oracle -c "lsnrctl start" >> /var/log/oracle
echo "Done."
echo ""
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
touch /var/lock/subsys/oracle
;;
*)
echo "Usage: oracle {start|stop|restart}"
exit 1
esac
It is worth checking that this file actually
correctly stops and starts the databases for your system. Check the log file,
/var/log/oracle for error messages.
Once this script is working we need to create
start and kill symbolic links in the appropriate runlevel directories
/etc/rc.d/rcX.d.
The following commands will ensure that the
databases will come up in runlevels 2,3 and 4:
$ ln -s ../init.d/oracle /etc/rc.d/rc2.d/S99oracle
$ ln -s ../init.d/oracle /etc/rc.d/rc3.d/S99oracle
$ ln -s ../init.d/oracle /etc/rc.d/rc4.d/S99oracle
To stop the databases on reboot or restart we
need the following links:
$ ln -s ../init.d/oracle /etc/rc.d/rc0.d/K01oracle
$ ln -s ../init.d/oracle /etc/rc.d/rc6.d/K01oracle
Note:
If dbstart and dbshut use
/var/opt/oracle/oratab as oracle sid config file, you should make a link
$ln –s /etc/oratab /var/opt/oracle/oratab