Unix Code - Detail View


Date

Name

Plattform

Language

Kurzbeschreibung

Owner

Link

26.02.2003

xmpDB2All.sh

Unix

Shell

Executes DB2 commands on every instance of a database server

Gernot Ruban

 

DB2 ist ein Produkt der
IBM Corporation. Bitte
Copyright-  und Trademark-Hinweise beachten!

#!/bin/ksh
################################################################################
# xmpDB2All.sh - DB2 Command an allen DB2 Instanzen eines Systems ausführen
# ------------------------------------------------------------------------------
# Parameter: db2cmd         - DB2 Command (je Instanz)
#            regfile         - Pfad zu DB2 Instance Registry (optional)
#
# Calls ...: xmpSetFunktion.sh
#            xmpLog.pl          - Protokollierung auf zentraler Log Datei
#
# Comment  : Die Instanzen eines DB2 Systems sind unter Unix im Pfad /var/db2/vn
#            gespeichert. Mit dem Namen kann dann die /etc/passwd nach Instance
#            Home Directories durchsucht werden. Hier setzt man dann mit dem Cmd
#            db2profile die Umgebung und kann dann beliebige DB2 Commands
#     ausführen. 
#     Dieses Script eignet sich besonders für das Stoppen und Starten
#     aller Instanzen auf einem System, wobei die Instanzen nicht
#            bekannt sein müssen.
#
# ------------------------------------------------------------------------------
# Autor      G.Ruban /18.09.00  - erste Version V1.1
#            G.Ruban /20.02.01  - V1.2 Protokollierung per xmpLog.pl Perl Script
#            G.Ruban /10.07.01  - V1.3 Perl Path (whence) in PATH setzen
################################################################################

#-------------------------------------------------------------------------------
# Init
#-------------------------------------------------------------------------------
  PROG=`basename $0`
  VER="1.3"

#-------------------------------------------------------------------------------
# Pfad der DBA's Administrationsfunktion, -steuerdaten festlegen
#-------------------------------------------------------------------------------
# der Defaultwert ist :
  xmpDBADIR="/opt/xmpdba"
  export xmpDBADIR
  xmpDbaDir="$xmpDBADIR"

  if [ ! -f "$xmpDbaDir/bin/xmpFunktion.sh" ] ; then
     Msg="Der Defaultwert des DBA-Pfad stimmt nicht mehr. Abend! "
     echo $PROG $Msg
     return 128
  fi
 
#-------------------------------------------------------------------------------
# Funktionen aktivieren
#-------------------------------------------------------------------------------
   . ${xmpDbaDir}/bin/xmpFunktion.sh
  if [ $? -ne 0 ] ; then
     Msg="Aktivieren der Funktionen $Funktion ist fehlgeschlagen. Abend!"
     echo $PROG $Msg
     exit 128
  fi

#-------------------------------------------------------------------------------
# Perl Library in der Umgebung gefunden? Wenn nicht, setzen!
#-------------------------------------------------------------------------------
  if [ ! "$PERL5LIB" ]; then      
     PERL5LIB=":/usr/local/bin:$xmpDBADIR/bin"
     export PERL5LIB
  else
     if [ -z `echo $PERL5LIB | grep "[.]*$xmpDBADIR/bin[.]*"` ]; then
        PERL5LIB="$PERL5LIB:/usr/local/bin:$xmpDBADIR/bin"
        export PERL5LIB
     fi   
  fi

#-------------------------------------------------------------------------------
# Defaults setzen
#-------------------------------------------------------------------------------
  if [ ! "$2" ]; then
regfile=`find /var/db2/ -name 'profiles.reg' -type f -print`
  else
regfile=$2
  fi

#-------------------------------------------------------------------------------
# Info Block ausgeben
#-------------------------------------------------------------------------------
  InfoMsg $PROG " - V$VER"
  InfoMsg "======================================================="
  InfoMsg "Current User ................: "`id`
  InfoMsg "Current Date/Time ...........: "`date +%Y-%m-%d-%H.%M.%S`
  InfoMsg "System ......................: "`uname -n`
  InfoMsg "DB2 Command .................: $1"

#-------------------------------------------------------------------------------
# Argumente Prüfen
#-------------------------------------------------------------------------------
  if [ $# -lt 1 or $1 = ? ] ; then
InfoMsg "Syntax für $0 db2cmd regfile"
InfoMsg "... where db2cmd  = DB2 Command, e.g. db2stop"
InfoMsg "          regfile = DB2 Instance Registry File (profiles.reg)"
InfoMsg "Abend mit RC=4"
 exit 4
  fi

  if [ ! "$regfile" ]; then
InfoMsg "$0: Keine DB2 Instances installiert, oder keine profiles.reg gefunden!"
InfoMsg "Abend mit RC=16"
 exit 16
  fi

#-------------------------------------------------------------------------------
# Perl Bin Path in PATH setzen
#-------------------------------------------------------------------------------
  perlpath=`whence perl`
  if [ $? -ne 0 ] ; then
     if [ -x "/usr/local/bin/perl" ]; then
PATH="$PATH:/usr/local/bin"
     export PATH
     else
        if [ -x "/usr/bin/perl" ]; then
   PATH="$PATH:/usr/bin"
        export PATH
        else
           WarningMsg "$0: Perl Binary not found, possibly cannot execute Perl."
        fi
     fi
  else
     perlpath=`dirname $perlpath`
     PATH="$PATH:$perlpath"
     export PATH
  fi
# echo "PATH=$PATH"

#-------------------------------------------------------------------------------
# Liste der Instanzen aus profiles.reg abarbeiten
#-------------------------------------------------------------------------------
  maxrc=0
  for r in $regfile
  do
#-----------------------------------------------------------------------
# Prüfen, ob die Dateien da sind und lesbar sind
#-----------------------------------------------------------------------
if [ ! -r $r ] ; then
InfoMsg "$0: $r nicht verarbeitbar!"
InfoMsg "Abend mit RC=16"
 exit 16
else
#---------------------------------------------------------------
# Jedes profiles.reg ausgeben - es stehen die Instanzen drin
#---------------------------------------------------------------
InfoMsg "DB2 Instance Registry Files  : $r"
ilist=`cat $r`
#echo ">>>$ilist<<<"
for i in $ilist
do
#-------------------------------------------------------
# In /etc/passwd nach Instance Home Directory suchen
#-------------------------------------------------------
#echo ">>>$i<<<"
 pi=`cat /etc/passwd | grep $i | awk -F: '{print $6}'`
#echo ">>>$?<<<"
for p in $pi
do
#-----------------------------------------------
# Prüfen, ob db2profile Script vorhanden ist
#-----------------------------------------------
#echo ">>>$p<<<"
if [ -x "$p/sqllib/db2profile" ]; then
InfoMsg "- Instanz ...................: $i"
InfoMsg "  - Home Directory ..........: $p"
out=`ksh -c ". $p/sqllib/db2profile; $1; exit"`
rc=$?
InfoMsg "  - Requested Command - RC ..: $rc"
InfoMsg "  - Command Output ..........: $out"
if [ $rc -gt maxrc ]; then
maxrc=$rc
fi
#---------------------------------------
# Protokollierung
#---------------------------------------
perl ${xmpDbaDir}/bin/xmpLog.pl -a "xmpDB2All.sh" -s "I" -t "RC=$rc CMD=$1"
else
InfoMsg "- User/Instance irrelevant ..: $p"
fi
done
done
fi
  done

#-------------------------------------------------------------------------------
# *** ENDE ***
#-------------------------------------------------------------------------------
  if [ $maxrc -ne 0 ]; then
WarningMsg "$0 finished. (RC=$maxrc)"
  else
InfoMsg "$0 finished. (RC=$maxrc)"
  fi
  perl ${xmpDbaDir}/bin/xmpLog.pl -a "xmpDB2All.sh" -s "I" -t "MAXRC=$maxrc"

exit $maxrc

© Gernot Ruban