Next Previous Contents

## 6. Automatic Startup and Shutdown

## 6.1 `dbstart` & `dbstop`

The automatic startup and shutdown of the Oracle database can be achieved (in 7.3.3.0.0) 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:/home/oracle/7.3.3.0.0:Y
>     leaveup:/home/oracle/7.3.2.1.0:N

> `

## 6.2 `init.d` & `rc.d`

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 5.0. 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          # Halting
>     $ ln -s ../init.d/oracle /etc/rc.d/rc6.d/K01oracle          # Rebooting

> `

Next Previous Contents