Unix Code - Detail View


Date

Name

Plattform

Language

Kurzbeschreibung

Owner

Link

19.10.2001

db2bench.ksh

Unix

Shell

Executing db2batch Command

IBM Corp. 2000

ftp://www.redbooks.ibm.com/redbooks/sg246012

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

#!/bin/ksh
# db2bench.ksh
# Raanon Reutlinger, IBM Israel, May 2000

display_syntax()
{
echo "\
SYNTAX: `basename $0` -c \"comment\" -d dbname [-u user/pwd] -q queryNum -o N
      [-ir rows] [-if rows] [-e m] [-v] [-b]
Execute db2batch tool which executes the SQL found in a file and reports on
execution times and snapshot information.
-c:   Comment placed on first line of Summary output file (required)
-d:   Database name (required)
-u:   Userid and password seperated by slash (default=db2inst1/db2inst1)
-q:   Query number to execute. File with .sql extension must exist in
\$QUERIES directory (required)
-o:   Save output in dir N under \$RESULTS (required)
(0=Current dir; -1=Not Valid; no default)
-ir:  Rows to return to output file (-1=all,default=10)
-if:  Rows to fetch even if not returned (-1=all,default)
-e:   Explain level: 0=ExecuteOnly; 1=ExplainOnly; 2=Explain&Execute
(default=2)
-v:   Verbose (default is NOT to display output)
-b:   DONT save prior (old) results to bak directory (default=save)
(Not saved anyway unless -o is greater than 0)
Notes:
Value for -d is part of output and summary filename.
"
}

# Constants

QUERIES=~/queries
RESULTS=~/results
RESULTS_FILE="`basename $0 .ksh`.awk"
RES_EXT=".out"
SUM_EXT=".sum"

# Defaults

QUIET=1
RESULTS_DIR=""# no default
SAVE_OLD_RESULTS=1
PARSE_ERROR=""
PARAMS=$*

USERPASS="db2inst1/db2inst1"
QRYNUM=""
IROWS=10
IFETCH=-1
EXPLAIN=2

# Parse parameters

while [ "$1" != "" ]
do
case "$1" in
"-c") shift; COMMENT=$1; shift;;
"-d") shift; DB_NAME=$1; shift;;
"-u") shift; USERPASS=$1; shift;;
"-q") shift; QRYNUM=$1; shift;;
"-ir") shift; IROWS=$1; shift;;
"-if") shift; IFETCH=$1; shift;;
"-e") shift; EXPLAIN=$1; shift;;
"-o") shift; RESULTS_DIR=$1; shift;;
"-v") shift; QUIET=0;;
"-b") shift; SAVE_OLD_RESULTS=0;;
*) shift; PARSE_ERROR="Invalid Param";;
esac
done

# Verify parameters

[ "$COMMENT" = "" ] && \
PARSE_ERROR="${PARSE_ERROR} -Comment is required"

[ "$DB_NAME" = "" ] && \
PARSE_ERROR="${PARSE_ERROR} -Database name is required"

[ "$QRYNUM" = "" ] && \
PARSE_ERROR="${PARSE_ERROR} -Query number is required" || \
[ $QRYNUM -ge 0 ] 2>/dev/null || \
PARSE_ERROR="${PARSE_ERROR} -Invalid number following -q param"

[ "$RESULTS_DIR" = "" ] && \
PARSE_ERROR="${PARSE_ERROR} -Output directory number is required" || \
[ $RESULTS_DIR -ge 0 ] 2>/dev/null || \
PARSE_ERROR="${PARSE_ERROR} -Invalid number following -o param"

echo "$USERPASS" | awk -F/ '($1 == "") || ($2 == ""){exit -1}' || \
PARSE_ERROR="${PARSE_ERROR} -Invalid user/pass following -u"

[ $IROWS -ge -1 ] 2>/dev/null || \
PARSE_ERROR="${PARSE_ERROR} -Invalid number following -ir param"

[ $IFETCH -ge -1 ] 2>/dev/null || \
PARSE_ERROR="${PARSE_ERROR} -Invalid number following -if param"

[ $EXPLAIN -ge 0 -a $EXPLAIN -le 2 ] 2>/dev/null || \
PARSE_ERROR="${PARSE_ERROR} -Invalid number following -e param"

if [ "$PARSE_ERROR" != "" ]
then
echo ""
echo $PARSE_ERROR
echo ""
display_syntax
exit
fi

DB_NAME=`echo $DB_NAME | tr [a-z] [A-Z]`
RESULTS_FILE=$QRYNUM

RES_EXT="_${DB_NAME}${RES_EXT}"
SUM_EXT="_${DB_NAME}${SUM_EXT}"

if [ $RESULTS_DIR -gt 0 ]
then
RES_OUT=${RESULTS}/${RESULTS_DIR}/${RESULTS_FILE}${RES_EXT}
SUM_OUT=${RESULTS}/${RESULTS_DIR}/${RESULTS_FILE}${SUM_EXT}
RES_BAK=${RESULTS}/${RESULTS_DIR}/bak/${RESULTS_FILE}${RES_EXT}.$$
SUM_BAK=${RESULTS}/${RESULTS_DIR}/bak/${RESULTS_FILE}${SUM_EXT}.$$
else
RES_OUT=${RESULTS_FILE}${RES_EXT}
SUM_OUT=${RESULTS_FILE}${SUM_EXT}
fi

if [ $RESULTS_DIR -gt 0 ]
then
mkdir $RESULTS 2>/dev/null
mkdir $RESULTS/$RESULTS_DIR 2>/dev/null
if [ $SAVE_OLD_RESULTS -eq 1 ]
then
mkdir $RESULTS/$RESULTS_DIR/bak2>/dev/null
cp $RES_OUT $RES_BAK 2>/dev/null && echo "[Created: $RES_BAK]"
cp $SUM_OUT $SUM_BAK 2>/dev/null && echo "[Created: $SUM_BAK]"
[ -f $RES_BAK ] && \
echo "[Modifying: $RES_BAK]" && \
`dirname $0`/db2bench_prefix.ksh $RES_BAK

fi
fi

[ $QUIET -eq 1 ] && VERBOSE="off" || VERBOSE="on"

# BEGIN .......

[ $QUIET -eq 1 ] && Q_OUTPUT=">> $SUM_OUT" || Q_OUTPUT="| tee -a $SUM_OUT"
rm $SUM_OUT 2>/dev/null

echo "[Creating: $SUM_OUT]"
echo "[Creating: $RES_OUT]"
echo ""

eval echo "-- $COMMENT"$Q_OUTPUT
eval echo "-- ----------------------------------------"$Q_OUTPUT
eval echo "-- Invocation: $0 $PARAMS"$Q_OUTPUT
eval echo "--             `date`"$Q_OUTPUT
eval echo "-- "$Q_OUTPUT

echo "-- $COMMENT">  $RES_OUT
echo "-- ----------------------------------------">> $RES_OUT
echo "-- Invocation: $0 $PARAMS">> $RES_OUT
echo "--             `date`">> $RES_OUT
echo "-- ">> $RES_OUT

eval echo db2batch \
-d $DB_NAME \
-f $QUERIES/${QRYNUM}.sql \
-r ${RES_OUT},${SUM_OUT} \
-a db2inst1/db2inst1 \
-c off \
-i complete \
-o r $IROWS  f $IFETCH  p 5  e $EXPLAIN \
-v $VERBOSE$Q_OUTPUT
eval echo ""$Q_OUTPUT

echo db2batch \
-d $DB_NAME \
-f $QUERIES/${QRYNUM}.sql \
-r ${RES_OUT},${SUM_OUT} \
-a db2inst1/db2inst1 \
-c off \
-i complete \
-o r $IROWS  f $IFETCH  p 5  e $EXPLAIN \
-v $VERBOSE>> $RES_OUT
echo "">> $RES_OUT

db2batch \
-d $DB_NAME \
-f $QUERIES/${QRYNUM}.sql \
-r ${RES_OUT}.tmp,${SUM_OUT}.tmp \
-a db2inst1/db2inst1 \
-c off \
-i complete \
-o r $IROWS  f $IFETCH  p 5  e $EXPLAIN \
-v $VERBOSE

[ ! -f ${RES_OUT}.tmp ] && echo "Error! File not created!
        RES_OUT=${RES_OUT}.tmp" &&
exit

cat ${RES_OUT}.tmp>> $RES_OUT && \
rm  ${RES_OUT}.tmp

cat ${SUM_OUT}.tmp>> $SUM_OUT && \
rm  ${SUM_OUT}.tmp

# Prefix selected lines with filename
echo ""
echo "[Modifying: $RES_OUT]"
`dirname $0`/db2bench_prefix.ksh $RES_OUT

#db2batch -d tpc -f queries/2.sql -a db2inst1/db2inst1 -c off -i complete -o r 2 f -1 p 5 e 0 -v off | awk '/Summary of Results/{doprint=1}doprint||/seconds *$/{print}'

© Gernot Ruban