DB2 does not tell you its invoking the USEREXIT.  Your script must do that
by recording the information somewhere.  I would suggest a file with a
hardcoded path.  Since you mentioned that you already tried this there must
be some additional error in configuration.  After you change userexit you
probably have to do some shutdown restart to get it to take effect.  It
could be the database or the entire DBMS - I don't remember which.  The
USEREXIT executeable must also be in the path for DB2 to be able to invoke
it.

Remember your userexit runs under DB2's userid so you need to execute and
setup all the environment variables for it.

Below is a version of a userexit I used in another company to move log files
to an archive directory where they would eventually be moved to tape.  I
sent it out once before.  This is a standard korn shell script so it should
work fine on all the platforms you described below.  It could also be easily
converted to perl.


#!/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


> -----Original Message-----
> From: Philip Nelson (DBA) [SMTP:[EMAIL PROTECTED]]
> Sent: Tuesday, July 10, 2001 12:06 PM
> To:   [EMAIL PROTECTED]
> Subject:      DB2EUG: REQ : User Exit Shell / Perl Script
> 
> First I'd better introduce myself.
> 
> My name is Phil Nelson, I work for Scottish Widows as a Senior DBA and I
> have been using DB2 since it was OS/2 DBM (in fact OS/2 EE).
> 
> I currently look after AIX, Solaris and Linux DB2 servers (also DB2 for
> OS/390, IMS, SQL Server and Oracle).
> 
> Now here's my first question (your starter for 10) -
> 
> I want to set up user exit on our Solaris boxes to move logs to another
> box when they are archived.
> 
> I want to use a script rather than a compiled program - mainly because I
> can handle Perl and shell scripts better than C, and also because we don't
> have a C compiler on our Solaris boxes.
> 
> I've created a very simple Perl script, with a view to testing what is
> passed into the script.  It basically prints out the contents of @ARGV.
> I've tried just writing to STDOUT, also to a file.
> 
> I set USEREXIT on in DB CFG.  I then ran a big update of a test table and
> watched for new logs to appear.
> 
> No output appears anywhere.  There's also nothing in db2diag.log to say
> the user exit wasn't found.
> 
> HELP !!!
> 
> TIA
> 
> Phil Nelson
> Senior DBA
> Bojnice Database Consulting
> 
> 
> =====
> To unsubscribe, send 'unsubscribe' to [EMAIL PROTECTED]
> For other info (and scripts), see
> http://people.mn.mediaone.net/scottrmcleod

=====
To unsubscribe, send 'unsubscribe' to [EMAIL PROTECTED]
For other info (and scripts), see http://people.mn.mediaone.net/scottrmcleod

Reply via email to