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