Auto Startup And Shutdown
設定方法
起動と停止スクリプトを確認した上
dboraスクリプトを/etc/init.d/dboraに配置し、権限とオーナーを正しく直して、chkconfigでサービスをインストールする。
chkconfig --add dbora chkconfig --list dbora
dboraスクリプト
#!/bin/sh # # chkconfig: - 99 10 # description: Oracle Database Server # processname: ora_ # # dbora This shell script takes care of starting and stopping # Oracle Database Server. # /etc/init.d/dbora SUBSYS=/var/lock/subsys/dbora dbora_init() { # get ORACLE_HOME from the first entry, # whose 3rd field is Y, in /etc/oratab. if [ ! -f /etc/oratab ] then echo "auto startup/shudown of Oracle: /etc/oratab does not exist." exit 1 fi ORA_HOME=`awk -F: '/^[^#:]+:.+:[Y]$/ { print $2; exit}' /etc/oratab` if [ x$ORA_HOME = "x" ]; then echo "There is not Y entry in /etc/oratab." exit 1 fi # get oracle's owner from owner of dbstart. if [ ! -f $ORA_HOME/bin/dbstart ] then echo "auto startup/shudown of Oracle: Oracle may not be installed" \ "correctly." exit 1 fi ORA_OWNER=`ls -l $ORA_HOME/bin/dbstart | awk '{print $3}'` } case "$1" in 'start') if [ -f $SUBSYS ]; then echo $0 alredy started. exit 1 fi dbora_init # Start the Oracle databases: su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart" su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start" # Start Intelligent Agent and Oracle Management Server # --- for Oracle9i --- # su - $ORA_OWNER -c "$ORA_HOME/bin/agentctl start" # su - $ORA_OWNER -c "$ORA_HOME/bin/oemctl start oms" # --- for Oracle8i --- # su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl dbsnmp_start" # su - $ORA_OWNER -c "$ORA_HOME/bin/oemctrl start oms" # -------------------- # Start the Oracle HTTP Server # This is a BUG workaround. $ORACLE_HOME/Apache/Jserv/etc # /jserv.properties needs DISPLAY. # test -z "$DISPLAY" && export DISPLAY=":60000.0" # su - $ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl start" # -------------------- touch $SUBSYS ;; 'stop') if [ ! -f $SUBSYS ]; then echo $0 alredy stopped. exit 1 fi dbora_init # Stop Intelligent Agent # --- for Oracle9i --- # su - $ORA_OWNER -c "$ORA_HOME/bin/agentctl stop" # --- for Oracle8i --- # su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl dbsnmp_stop" # -------------------- # Stop the Oracle HTTP Server # su - $ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl stop" # -------------------- # Stop the Oracle databases: su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop" su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut" rm -f $SUBSYS ;; 'restart') $0 stop $0 start ;; 'status') if [ -f $SUBSYS ]; then echo $0 started. else echo $0 stopped. fi ;; *) echo "Usage: $0 {start|stop|status}" exit 1 esac exit 0
起動設定
# # $Header: dbstart.sh.pp 03-apr-2001.13:38:21 jboyce Exp $ dbstart.sh.pp Copyr (c) 1991 Oracle # ################################### # # usage: dbstart # # This script is used to start ORACLE from /etc/rc(.local). # It should ONLY be executed as part of the system boot procedure. # ##################################### ORATAB=/etc/oratab trap 'exit' 1 2 3 case $ORACLE_TRACE in T) set -x ;; esac # Set path if path not set (if called from /etc/rc) case $PATH in "") PATH=/bin:/usr/bin:/etc export PATH ;; esac # Save LD_LIBRARY_PATH SAVE_LLP=$LD_LIBRARY_PATH # # Loop for every entry in oratab file and and try to start # that ORACLE # cat $ORATAB | while read LINE do case $LINE in \#*) ;; #comment-line in oratab *) # Proceed only if third field is 'Y'. if [ "`echo $LINE | awk -F: '{print $3}' -`" = "Y" ] ; then ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -` if [ "$ORACLE_SID" = '*' ] ; then ORACLE_SID="" fi # Called programs use same database ID export ORACLE_SID ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -` # Called scripts use same home directory export ORACLE_HOME # Put $ORACLE_HOME/bin into PATH and export. PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/etc ; export PATH # add for bug # 652997 LD_LIBRARY_PATH=${SAVE_LLP}:${ORACLE_HOME}/lib ; export LD_LIBRARY_PATH PFILE=${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora # See if it is a V6 or V7 database VERSION=undef if [ -f $ORACLE_HOME/bin/sqldba ] ; then SQLDBA=sqldba VERSION=`$ORACLE_HOME/bin/sqldba command=exit | awk ' /SQL\*DBA: (Release|Version)/ {split($3, V, ".") ; print V[1]}'` case $VERSION in "6") ;; *) VERSION="internal" ;; esac else if [ -f $ORACLE_HOME/bin/svrmgrl ] ; then SQLDBA=svrmgrl VERSION="internal" else SQLDBA="sqlplus /nolog" fi fi STATUS=1 if [ -f $ORACLE_HOME/dbs/sgadef${ORACLE_SID}.dbf ] ; then STATUS="-1" fi if [ -f $ORACLE_HOME/dbs/sgadef${ORACLE_SID}.ora ] ; then STATUS="-1" fi pmon=`ps -ef | egrep pmon_$ORACLE_SID | grep -v grep` if [ "$pmon" != "" ]; then STATUS="-1" echo "Database \"${ORACLE_SID}\" already started." fi if test $STATUS -eq -1 ; then echo "" echo "Database \"${ORACLE_SID}\" possibly left running when system went down (system crash?)." echo "Notify Database Administrator." case $VERSION in "6") sqldba "command=shutdown abort" ;; "internal") $SQLDBA $args <<EOF connect internal shutdown abort EOF ;; *) $SQLDBA $args <<EOF connect /as sysdba shutdown abort EOF ;; esac if test $? -eq 0 ; then STATUS=1 else echo "Database \"${ORACLE_SID}\" NOT started." fi fi if test $STATUS -eq 1 ; then if [ -f $PFILE ] ; then case $VERSION in "6") sqldba command=startup ;; "internal") $SQLDBA <<EOF connect internal startup EOF ;; *) $SQLDBA <<EOF connect / as sysdba startup EOF ;; esac if test $? -eq 0 ; then echo "" echo "Database \"${ORACLE_SID}\" warm started." else echo "" echo "Database \"${ORACLE_SID}\" NOT started." fi else echo "" echo "Can't find init file for Database \"${ORACLE_SID}\"." echo "Database \"${ORACLE_SID}\" NOT started." fi fi fi ;; esac done
停止設定
ここで、もともとオラクル9iがインストールしたスクリプトを修正したところがある。
APサーバなど常に接続しているクライアントがあるため、
もともとのバージョンならシャットダウンができなくなるから
もともと: shutdown
修正: shutdown immediate
# # $Header: dbshut.sh.pp 03-apr-2001.13:38:20 jboyce Exp $ dbshut.sh.pp Copyr (c) 1991 Oracle # ################################### # # usage: dbshut # # This script is used to shutdown ORACLE from /etc/rc(.local). # It should ONLY be executed as part of the system boot procedure. # ##################################### ORATAB=/etc/oratab trap 'exit' 1 2 3 case $ORACLE_TRACE in T) set -x ;; esac # Set path if path not set (if called from /etc/rc) case $PATH in "") PATH=/bin:/usr/bin:/etc export PATH ;; esac # Save LD_LIBRARY_PATH SAVE_LLP=$LD_LIBRARY_PATH # # Loop for every entry in oratab file and and try to shut down # that ORACLE # cat $ORATAB | while read LINE do case $LINE in \#*) ;; #comment-line in oratab *) # Proceed only if third field is 'Y'. if [ "`echo $LINE | awk -F: '{print $3}' -`" = "Y" ] ; then ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -` if [ "$ORACLE_SID" = '*' ] ; then ORACLE_SID="" fi # Called programs use same database ID export ORACLE_SID ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -` # Called scripts use same home directory export ORACLE_HOME # Put $ORACLE_HOME/bin into PATH and export. PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/etc ; export PATH # add for bug 652997 LD_LIBRARY_PATH=${SAVE_LLP}:${ORACLE_HOME}/lib ; export LD_LIBRARY_PATH PFILE=${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora # See if it is a V6 or V7 database VERSION=undef if [ -f $ORACLE_HOME/bin/sqldba ] ; then SQLDBA=sqldba VERSION=`$ORACLE_HOME/bin/sqldba command=exit | awk ' /SQL\*DBA: (Release|Version)/ {split($3, V, ".") ; print V[1]}'` case $VERSION in "6") ;; *) VERSION="internal" ;; esac else if [ -f $ORACLE_HOME/bin/svrmgrl ] ; then SQLDBA=svrmgrl VERSION="internal" else SQLDBA="sqlplus /nolog" fi fi case $VERSION in "6") sqldba command=shutdown ;; "internal") $SQLDBA <<EOF connect internal shutdown immediate EOF ;; *) $SQLDBA <<EOF connect / as sysdba shutdown immediate EOF ;; esac if test $? -eq 0 ; then echo "Database \"${ORACLE_SID}\" shut down." else echo "Database \"${ORACLE_SID}\" not shut down." fi fi ;; esac done
page_revision: 2, last_edited: 1247455983|%e %b %Y, %H:%M %Z (%O ago)





