Este script se sitúa en el directorio /etc/init.d con el nombre "oracle".
Dentro del directorio /etc/rc.d vamos a encontrar otros directorios con el nombre rcnivel.d, donde nivel corresponde a uno de los detallados a continuación:
0: Apagado del sistema operativo.
1: Inicio en modo monousuario.
2: Multiusuario sin soporte de red.
3: Multiusuario con soporte de red.
4: No utilizado.
5: Inicio gráfico.
6: Reinicio del sistema operativo.
Cada uno de estos directorios, contiene un conjunto de scripts para detener e iniciar diferentes servicios requeridos, según el nivel de inicio que se solicite. Este conjunto de scripts se dividen en dos grupos, y son ejecutados secuencialmente en orden alfabético. Primero se ejecutan los K##* (Kill scripts) deteniendo los servicios que no corresponden al nivel de inicio seleccionado, y posteriormente se ejecutan los S##* (Start scripts), que inician los servicios requeridos por el nivel solicitado. Aclaro que ## es un número de secuencia que va desde el 00 al 99, y el * sería el nombre del servicio.
Luego de esta breve introducción a la estructura de scripts de inicialización del sistema, volvemos a nuestro objetivo, iniciar y detener la instancia de base de datos Oracle.
Cuando instalamos el motor de base de datos, se generan dos script en $ORACLE_HOME/bin, denominados dbstart y dbshut, revisar que en su interior localicen correctamente el archivo oratab, si no es así, corregir dicha situación.
En todos los niveles de inicio, generar un enlace simbólico al script /etc/init.d/oracle, con el nombre K00oracle. Con esto nos aseguramos que cada vez que se cambie a un nivel de inicio diferente, se baje la instancia de base de datos si se encuentra activa.
En mi caso, solo quiero que se levante la base de datos en el nivel 3 de inicio, y para ello genero un enlace simbólico a /etc/init.d/oracle con el nombre S98oracle.
Un pequeño secreto: cuando se ejecuta el script S98oracle, se genera el archivo /var/lock/subsys/oracle, de no existir este archivo, cuando se ejecute el script K00oracle no hará nada, porque pensará que nunca se inició la instancia de base de datos.
Para más detalles de cómo se ejecutan los diferentes script de inicio, se puede ver el script /etc/rc.d/rc
A continuación, les dejo el fuente del script oracle, que también se encarga de iniciar el listener para conexiones remotas por TNS.
#!/bin/bash -x
################################################################################
#
# ORACLE: Start database and listener.
#
################################################################################
function dbstart {
if su - oracle -c "/u00/oracle/product/10.1.0.3/bin/dbstart"; then
if ps -fu oracle|grep -v grep|grep -q ora_smon; then
if su - oracle -c "/u00/oracle/product/10.1.0.3/bin/lsnrctl start"; then
return 0
else
return 2
fi
fi
else
return 1
fi
return 0
}
################################################################################
#
# ORACLE: Shutdown listener and database.
#
################################################################################
function dbshut {
if ps -fu oracle|grep -v grep|grep -q tnslsnr; then
su - oracle -c "/u00/oracle/product/10.1.0.3/bin/lsnrctl stop"
fi
if su - oracle -c "/u00/oracle/product/10.1.0.3/bin/dbshut"; then
return 0
else
return 1
fi
return 0
}
################################################################################
#
# ORACLE: Startup / Shutdown listener and database.
#
################################################################################
case ${1} in
start) if dbstart; then
touch /var/lock/subsys/oracle
fi;;
stop) if dbshut; then
rm -f /var/lock/subsys/oracle 2>/dev/null
fi;;
reload|restart) if dbshut && dbstart; then
rm -f /var/lock/subsys/oracle 2>/dev/null
touch /var/lock/subsys/oracle
fi;;
*) exit 1
esac
exit 0