Tip

Database startup/shutdown UNIX script

Our development environment has over 10 databases active at one time. This script will start or shut down a particular database.

Here's the syntax:

sd the_database "shutdown abort" /var/opt/oracle/oratab 

or 

sd the_database "startup" /var/opt/oracle/oratab 

You can change the script to hard code the path to your oratab. It also assumes only two Oracle homes are to be found in oratab -- an 8.1.6 OR 8.1.7, and 7.3 (or other.) Further modifications are required to handle 8.1.6 AND 8.1.7! I use this script to schedule databases to start/stop via crontab.

                
#!/usr/bin/ksh 
#  sd - start database  or stop database 
#  sd takes three parameters 
#  1) sid 
#  2) what to do, ex: 
#      "startup mount" 
#      "startup" 
#      "shutdown immediate" 
#      "shutdown abort" 
#       etc. 
#   3) path to oratab file  ex:  /var/opt/oracle/oratab 
#   for ease, you may want to hardcode the path and eliminate the 3rd parameter 
# 
#  example:  sd my_database "shutdown abort" /var/opt/oracle/oratab 
# 
#  assumes only two environments 8.1 and 7.3 if you have more 
#  than one environment or you have 8.1.6 and 8.1.7, further 
#  changes must be made. 

#if [ -z "$*" ] || [ $# -lt 2 ] 
if [ -z "$*" ] || [ $# -lt 3 ] 
then 
  echo "USAGE: $0 sid startup or "shutdown abort"" 
else 
dowhat=$2 
ORACLE_SID=$1 
echo $ORACLE_SID 
doalter='alter system switch logfile;'

    Requires Free Membership to View

notfound='TRUE' #if [ "$dowhat" = "startup" ] if expr "$dowhat" : "startup" then doalter='REM;' fi # if you go with only two parameters, comment out the next line # and uncomment/set the oratab=path_to/oratab ORATAB=$3 # change this to where your oratab file is located. # ORATAB=/etc/oratab # ORATAB=/var/opt/oracle/oratab echo $dowhat cat $ORATAB | while read LINE do case $LINE in #*) ;; #comment-line in oratab *) if [ "`echo $LINE | awk -F: '{print $1}' -`" = "$ORACLE_SID" ] ; then if expr "`echo $LINE | awk -F: '{print $2}' -`" : "8.1" ; then v="`echo $LINE | awk -F: '{print $2}' -`" export ORACLE_BASE=$v ORACLE_BASE=$v echo "nORACLE_BASE=$v" export ORACLE_HOME=$v ORACLE_HOME=$v echo "nORACLE_HOME=$v" export JAVA_HOME=$v/jre/1.1.8 JAVA_HOME=$v/jre/1.1.8 echo "nJAVA_HOME=$v/jre/1.1.8" export JRECLASSPATH=$v/jre/1.1.8:$v/jdbc/lib JRECLASSPATH=$v/jre/1.1.8:$v/jdbc/lib echo "nCLASSPATH=$v/jre/1.1.8:$v/jdbc/lib" export ORACLE_SID=$1 ORACLE_SID=$1 echo "nORACLE_SID=$1" export LD_LIBRARY_PATH=$v/lib:$v/javavm/lib:$v/jlib:$v/network/lib:$v/jdbc/lib LD_LIBRARY_PATH=$v/lib:$v/javavm/lib:$v/jlib:$v/network/lib:$v/jdbc/lib echo "nLD_LIBRARY_PATH=$v/lib:$v/javavm/lib:$v/network/lib" export LIBPATH=$v/lib:$v/jlib:$v/javavm/lib:$v/network/lib LIBPATH=$v/lib:$v/jlib:$v/javavm/lib:$v/network/lib echo "nLIBPATH=$v/lib:$v/javavm/lib:$v/network/lib" export CLASSPATH=.:$v/jdbc/lib/classes111.zip:$v/lib:$v/jlib:$v/jlib/javax-ssl_1.2.jar:$v/jlib/jssl-1_2.jar:$v/javavm/l ib/aurora.zip:$v/lib/vbjapp.jar:$v/lib/vbjorb.jar CLASSPATH=.:$v/jdbc/lib/classes111.zip:$v/lib:$v/jlib:$v/jlib/javax-ssl_1.2.jar:$v/jlib/jssl-1_2.jar:$v/javavm/lib/auro ra.zip:$v/lib/vbjapp.jar:$v/lib/vbjorb.jar echo "nCLASSPATH=$v/jlib/javax-ssl_1.2.jar:$v/jlib/jssl-1_2.jar:$v/javavm/lib/aurora.zip:$v/javavm/lib:/$v/lib:$v/lib/ vbjapp.jar:$v/lib/vbjorb.jar:$v/jdbc/lib/classes111.zip:." export PATH=.:$HOME/bin:$v/bin:/bin:/usr/bin:/usr/lbin:/usr/ucb:/etc:$v/jre/1.1.8/bin PATH=.:$HOME/bin:$v/bin:/bin:/usr/bin:/usr/lbin:/usr/ucb:/etc:$v/jre/1.1.8/bin echo "nPATH=.:$HOME/bin:$v/bin:/bin:/usr/bin:/usr/lbin:/usr/ucb:/etc:n" notfound='FALSE' sqlplus -restrict 3 /nolog << EOF connect internal $doalter $dowhat EOF else v="`echo $LINE | awk -F: '{print $2}' -`" export ORACLE_BASE=$v ORACLE_BASE=$v echo "nORACLE_BASE=$v" export ORACLE_HOME=$v ORACLE_HOME=$v echo "nORACLE_HOME=$v" export PATH=.:$HOME/bin:$v/bin:/bin:/usr/bin:/usr/lbin:/usr/ucb:/etc: PATH=.:$HOME/bin:$v/bin:/bin:/usr/bin:/usr/lbin:/usr/ucb:/etc: echo "nPATH=.:$HOME/bin:$v/bin:/bin:/usr/bin:/usr/lbin:/usr/ucb:/etc:n" export ORACLE_SID=$1 ORACLE_SID=$1 notfound='FALSE' svrmgrl << EOF connect internal $doalter $dowhat EOF fi fi esac done if [ $notfound = 'TRUE' ] then echo "$ORACLE_SID was not found" fi fi

For More Information

  • What do you think about this tip? E-mail the Editor at tdichiara@techtarget.com with your feedback.
  • The Best Oracle Web Links: tips, tutorials, scripts, and more.
  • Have an Oracle tip to offer your fellow DBA's and developers? The best tips submitted will receive a cool prize--submit your tip today!
  • Ask your technical Oracle questions--or help out your peers by answering them--in our live discussion forums.
  • Check out our Ask the Experts feature: Our SQL, database design, Oracle, SQL Server, DB2, metadata, and data warehousing gurus are waiting to answer your toughest questions.

This was first published in March 2002

There are Comments. Add yours.

 
TIP: Want to include a code block in your comment? Use <pre> or <code> tags around the desired text. Ex: <code>insert code</code>

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy
Sort by: OldestNewest

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

Disclaimer: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.