Im attaching a sample DB2UEXIT program that I used in another life because
some people have asked me for it recently. This is a simple korn shell
script that I ran under AIX but I sure runs in HP and other flavours because
the code is very generic. The code itself simply copies a log file from the
directory where I store active logs to another directory where I archive
them to tape. It does have a nice feature of maintaining an audit log of
everything it does so you can monitor its status.
> <<db2uexit.txt>>
>
> TTFN and Hold Fast!
> Scott McLeod of MacLeod
> Best Buy, Inc.
> Sr. Database Architect
> 7750 Flying Cloud Dr.
> Eden Prairie, MN 55344
>
> (612) 324-0031 (voice)
> (612) 324-0828 (fax)
>
> [EMAIL PROTECTED]
>
>
#!/bin/ksh
################################################################################
#
# Usage: db2uexit
#
# Description: This script migrates active log files to the archive logs
# directory. It is invoked by DB2 automatically when a log full condition
# occurs.
#
# Parameters: See the IBM manual for information.
#
################################################################################
################################################################################
# Run the profile of the DB2 subsystem that invokes the exit
################################################################################
MYHOME="/db2_6000/`whoami`"
. $MYHOME/.profile > /dev/null 2>&1
################################################################################
# Set a path for a log file that contains info on archiving.
################################################################################
DIAGPATH="`db2 get dbm cfg | grep DIAGPATH | cut -c60-100`"
DIAGLEVEL="`db2 get dbm cfg | grep DIAGLEVEL | cut -c60-90`"
AUDIT_LOG=true
AUDIT_LOG_FILE="$DIAGPATH/db2uexit.log"
AUDIT_LOG_FILE="/db2_6000/db2p/sqllib/db2dump/db2uexit.log"
if [ "$AUDIT_LOG" = true ];then
echo "***************************************************************" >>
$AUDIT_LOG_FILE
echo "Userexit begins at `date`" >> $AUDIT_LOG_FILE
echo "DIAGLEVEL=$DIAGLEVEL,DIAGPATH=$DIAGPATH" >> $AUDIT_LOG_FILE
fi
#------------------------------------------------------------------------------#
#-- Test the number of parms passed and the format of them. --#
#------------------------------------------------------------------------------#
if [ $# -ne 4 ];then
if [ "$AUDIT_LOG" = true ];then
echo "Incorrect number of parms passed to Userexit program" >> $AUDIT_LOG_FILE
echo "Number of parms passed was $#" >> $AUDIT_LOG_FILE
fi
exit 20
fi
if [ "$1" = ARCHIVE ];then
continue
else
if [ "$1" = RETRIEVE ];then
continue
else
if [ "$AUDIT_LOG" = true ];then
echo "Unsupported function requested from Userexit program" >> $AUDIT_LOG_FILE
echo "Function requested was $1" >> $AUDIT_LOG_FILE
fi
echo "***************************************************************\n" >>
$AUDIT_LOG_FILE
exit 20
fi
fi
#------------------------------------------------------------------------------#
#-- ARCHIVE requests will copy file from activelogs to archivelogs
#------------------------------------------------------------------------------#
if [ "$1" = ARCHIVE ];then
#---------------------------------------------------------------------------#
#-- Audit the request --#
#---------------------------------------------------------------------------#
if [ "$AUDIT_LOG" = true ];then
echo "`date` DB2UEXIT AUDIT LOG ENTRY" >> $AUDIT_LOG_FILE
echo "Request to $1 file $4 from $3" >> $AUDIT_LOG_FILE
fi
#---------------------------------------------------------------------------#
#-- Copy the file to archivelogs --#
#---------------------------------------------------------------------------#
LCDBNAME="`echo $2 | tr 'A-Z' 'a-z'`"
echo "cp $3$4 $MYHOME/archivelogs/$LCDBNAME" >> $AUDIT_LOG_FILE
cp $3$4 $MYHOME/archivelogs/$LCDBNAME >> $AUDIT_LOG_FILE 2>&1
UNIXRC=$?
if [ "$UNIXRC" -ne 0 ];then
STANDRC=$STANDRC_28
if [ "$AUDIT_LOG" = true ];then
echo "cp Command Failed with RC:$UNIXRC" >> $AUDIT_LOG_FILE
fi
echo "***************************************************************\n" >>
$AUDIT_LOG_FILE
exit 28
fi
#---------------------------------------------------------------------------#
#-- Audit the request --#
#---------------------------------------------------------------------------#
if [ "$AUDIT_LOG" = true ];then
echo "Request to $1 file $4 from $3 was successful" >> $AUDIT_LOG_FILE
fi
fi
#------------------------------------------------------------------------------#
#-- RETRIEVE requests will cp a file from archivelogs to activelogs
#------------------------------------------------------------------------------#
if [ "$1" = RETRIEVE ];then
#---------------------------------------------------------------------------#
#-- Audit the request --#
#---------------------------------------------------------------------------#
if [ "$AUDIT_LOG" = true ];then
echo "Request to $1 file $4 to $3" >> $AUDIT_LOG_FILE
fi
#---------------------------------------------------------------------------#
#-- Copy the file
#---------------------------------------------------------------------------#
LCDBNAME="`echo $2 | tr 'A-Z' 'a-z'`"
echo "cp $MYHOME/archivelogs/$LCDBNAME/$4 $3" >> $AUDIT_LOG_FILE
cp $MYHOME/archivelogs/$LCDBNAME/$4 $3 >> $AUDIT_LOG_FILE 2>&1
UNIXRC=$?
if [ "$UNIXRC" -ne 0 ];then
if [ "$AUDIT_LOG" = true ];then
echo "cp Command Failed with RC:$UNIXRC" >> $AUDIT_LOG_FILE
echo " " >> $AUDIT_LOG_FILE
fi
echo "***************************************************************\n" >>
$AUDIT_LOG_FILE
exit 28
fi
#---------------------------------------------------------------------------#
#-- Audit the request --#
#---------------------------------------------------------------------------#
if [ "$AUDIT_LOG" = true ];then
echo "Request to $1 file $4 to $3 was successful" >> $AUDIT_LOG_FILE
fi
fi
if [ "$AUDIT_LOG" = true ];then
echo "Userexit ends at `date`" >> $AUDIT_LOG_FILE
echo "***************************************************************\n" >>
$AUDIT_LOG_FILE
fi