Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
170 changes: 106 additions & 64 deletions instance-applications/120-ibm-db2u-database/files/Run_Backup.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
#!/bin/bash
#set -x

#########################################################
# Run_Backup.sh
# Run_Backup.sh
# Run_Backup.sh will be called from the Cron Jobs
# This script will list all local databases running in the instance on a node. It will call the
# DB2_Backup.sh script to run a backup for each running database.
Expand All @@ -17,93 +15,137 @@
# NUMOFBKUPTOKEEP = This defines the number of days to keep a backup image on local disk
#
# Variables determined by the environment
# BACKUPTYPE = Is determined from the `date` command and the DAYOFFULL value
# BKPTYPE = Is determined from the `date` command and the DAYOFFULL value
# DB2INSTANCE = Pulled from the environment
# HOSTNAME
# DBNAME = Pulled from the `db2 list db directory`
#
# Backup command issued
# ./DB2_Backup.sh ${DB2INSTANCE} ${DBNAME} ${NUMOFBKUPTOKEEP} ${BACKUPTYPE} 2>>.BackupLOG.stderr > .BackupLOG.out
# ./DB2_Backup.sh ${DB2INSTANCE} ${DBNAME} ${NUMOFBKUPTOKEEP} ${BKPTYPE} 2>>.BackupLOG.stderr > .BackupLOG.out
#
# -- Revision of script to include new ICD URL
#########################################################

# -- Source the Props File
. /mnt/backup/bin/.PROPS

# -- Standard Parameters
DBINSTANCE=`whoami`
HOSTNAME=`hostname`
BACKUP_DIR=${HOME}/bin
BACKUP_SCRIPT=DB2_Backup.sh
DATETIME=`date +%Y-%m-%d_%H%M%S`;
DOW=`date | awk '{print $1}'`

# -- Verify and source db2profile

if [ ! -f "${HOME}/sqllib/db2profile" ]
then
if [[ ! -f "${HOME}/sqllib/db2profile" ]]; then
echo "ERROR - ${HOME}/sqllib/db2profile not found"
EXIT_STATUS=1
else
. ${HOME}/sqllib/db2profile
fi

# -- Debug Mode
set -x

# -- Backup Parameters
INSTANCE_HOME=`/usr/local/bin/db2greg -dump | grep -ae "I," | grep -v "/das," | grep "${DBINSTANCE}" | awk -F ',' '{print $5}'| cut -d/ -f 1,2,3,4,5`
SCRIPT_DIR=${INSTANCE_HOME}/bin
BACKUP_SCRIPT="${SCRIPT_DIR}/DB2_Backup.sh"
CUSTNAME=`hostname | sed 's/c-db2wh-//; s/c-//; s/-db2u-0//; s/db2u/-/; s/-manage//;' | tr '[:lower:]' '[:upper:]'`
BUCKET_ALIAS=`db2 list storage access | grep ${CONTAINER} -B4 | grep ALIAS | awk -F '=' '{print $2}'`
HSTYPE="Backup"
ICD_LOG=${SCRIPT_DIR}/.Maillive.log

# -- Valid only for MAS-CP4D customers
if (( ${CUSTNAME} )) ; then
CUSTNAME=`echo ${CONTAINER} | awk -F '-backup-' '{print $2}' | awk -F '-pr-' '{print $1}' | tr '[:lower:]' '[:upper:]'`
fi

# -- Database Environment
if [[ ${BUCKET_ALIAS} == "IBMCOS" ]]; then
DBENV="MAS MS"
else
DBENV="MAS SaaS"
fi

# -- Create ICD Incident , If Backup fails

CREATE_ICD() {
HTYPE=`echo ${HSTYPE} | tr '[:lower:]' '[:upper:]'`
DES="$1"
echo "############################" >> ${ICD_LOG}
LONGDES=`cat ${ICD_LOG} | sed 's/"//g' | sed "s/'//g"`
LONGDES=`echo "<pre> ${LONGDES} </pre>"`

# -- Verify the ICD URL Status
if curl -k -s --connect-timeout 3 ${ICD_URL_SAAS} >/dev/null; then
CURL_REQ="--request POST --url ${ICD_URL_SAAS} "
AUTH_REQ="apikey: ${ICD_API_KEY}"
fi

DOW=`date | awk '{print $1}'`

if [ ${DOW} = ${DAYOFFULL} ] ; then
BACKUPTYPE=full
else
BACKUPTYPE=inc
fi
# -- Generate Curl Syntax to push to ICD
cat << ! >.curl_${DBNAME}_ICD.sh
curl ${CURL_REQ} \
--header '${AUTH_REQ}' \
--header 'Content-Type: application/json' \
--data '{
"description":"${DES}",
"reportedpriority":4,
"internalpriority":4,
"reportedby":"DB2",
"affectedperson":"${DBENV}",
"ownergroup":"HSDBA",
"description_longdescription":"${LONGDES}",
"siteid":"001",
"classstructureid":"1341",
"classificationid":"IN-DBPERF",
"hshost":"${HOSTNAME}",
"hstype":"${HTYPE}"
}'
!
/bin/bash .curl_${DBNAME}_ICD.sh > .curl_${DBNAME}_ICD.out 2>&1

}

# -- Verify the day of the week
if [[ ${DOW} = ${DAYOFFULL} ]] ; then
BKPTYPE="FULL"
else
BKPTYPE="DIFF"
fi

# -- Loop through the available databases in the instance

DBS=`db2 list db directory | grep -B5 "Indirect" | grep "Database name" | awk '{ print $4 }'`
for DBNAME in ${DBS}
do
cd ${BACKUP_DIR}
./DB2_Backup.sh ${DB2INSTANCE} ${DBNAME} ${NUMOFBKUPTOKEEP} ${BACKUPTYPE} 2>.BackupLOG.stderr > .BackupLOG.out

RC=$?
if [ ${RC} -ne 0 ]; then

longdes="Failure to start the Backup job ${DATETIME} CUST=${CUSTNAME} ${RC}"
## Send Failure notification to a slack channel ##
cat << ! >.curl_${DBNAME}_RUN.sh
if [[ -n "${SLACKURL}" ]]; then
curl -X POST -H 'Content-type: application/json' --data '{"text":"$longdes"}' $SLACKURL
fi
cd ${SCRIPT_DIR}
${BACKUP_SCRIPT} ${DB2INSTANCE} ${DBNAME} ${NUMOFBKUPTOKEEP} ${BKPTYPE} 2>.BackupLOG.stderr > .BackupLOG.out
RC=$?
if [[ ${RC} -ne 0 ]]; then
LONGDES="Failure to start the Backup job ${DATETIME} CUST=${CUSTNAME} ${RC}"
# -- Send Failure notification to a slack channel
cat << ! >.curl_${DBNAME}_RUN.sh
curl -X POST -H 'Content-type: application/json' --data '{"text":"$LONGDES"}' ${SLACKURL}
!
/bin/bash .curl_${DBNAME}_RUN.sh > .curl_${DBNAME}_RUN.out 2>&1

##### Create ICD Incident ####
####### If Backup fails ###
des="${DBINSTANCE} - Backup - ${HOSTNAME} ${DBNAME} ${CUSTNAME} - MASMS -- Backup Failed"
echo "TESTING $instance - Backup - $ ${DBNAME} - Backup Failed" > .Maillive.log
echo "############################" >> .Maillive.log
#cat $BACK_LOG >> .Maillive.log
longdes=`cat .Maillive.log | sed 's/"//g' | sed "s/'//g"`
ICD_URL="https://servicedesk.mro.com"
if ! curl -k -s --connect-timeout 3 ${ICD_URL} >/dev/null; then
ICD_URL="https://servicedesk.cds.mro.com"
fi
/bin/bash .curl_${DBNAME}_RUN.sh > .curl_${DBNAME}_RUN.out 2>&1

cat << ! >.curl_${DBNAME}_ICD.sh
curl --insecure --location --request POST "${ICD_URL}/maximo_mif/oslc/os/hsincident?lean=1" \
--header "Authorization: Basic ${ICD_AUTH_KEY}" \
--header 'Content-Type: application/json' \
--data '{
"description":"$des",
"reportedpriority":4,
"internalpriority":4,
"reportedby":"DB2",
"affectedperson":"CTGINST1",
"description_longdescription":"$longdes",
"siteid":"001",
"classstructureid":"1341",
"classificationid":"IN-DBPERF",
"hshost":"{servicedesk-pdb-sjc03-2.cds.mro.com:0:50}",
"hstype":"BACKUP"
}'
!
if [[ -n "${ICD_AUTH_KEY}" ]]; then
/bin/bash .curl_${DBNAME}_ICD.sh > .curl_${DBNAME}_ICD.out 2>&1
fi
# -- Create ICD ticket if fails
DES="${CUSTNAME} - ${DBENV} - ${DBNAME} - ${HOSTNAME} -- Failed to Start Backup!! "
CREATE_ICD "${DES}"
fi

# -- Execute Online Reorgs for qualified tables and indexes after every Full Backup
if [[ ${DOW} = ${DAYOFFULL} ]] ; then
/bin/bash ${SCRIPT_DIR}/reorgTablesIndexesInplace.sh -db ${DBNAME} -s MAXIMO -tb_stats -ix_stats -window 240 -tr > ${HOME}/maintenance/logs/reorgTablesIndexesInplace_${DATETIME}.log 2>&1
fi

fi
done
/bin/bash ${HOME}/bin/runstats_rebind.sh >${HOME}/bin/.runstats_rebind.out 2>&1
/bin/bash ${HOME}/bin/grant_check.sh bludb >${HOME}/bin/.grant_check.out 2>&1


# -- Exeucte Runstats and Rebind for all tables daily
/bin/bash ${SCRIPT_DIR}/runstats_rebind.sh >${SCRIPT_DIR}/.runstats_rebind.out 2>&1
#/bin/bash ${SCRIPT_DIR}/grant_check.sh bludb >${SCRIPT_DIR}/.grant_check.out 2>&1

# -- END OF SCRIPT