- #!/usr/bin/env bash
- # Exxis Backup Service
- # Version: 1.0
- # Developer: Christopher Carrasco Cartagena
- clear
- source `dirname $0`/backup.conf
- spinner()
- {
- local pid=$1
- local delay=0.5
- local spinstr='|/-\'
- while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do
- local temp=${spinstr#?}
- printf " [%c] " "$spinstr"
- local spinstr=$temp${spinstr%"$temp"}
- sleep $delay
- printf "\b\b\b\b\b\b"
- done
- printf " \b\b\b\b"
- echo ""
- }
- createdirs()
- {
- mkdir -p ${BACKUP_DESTINY}data
- mkdir -p ${BACKUP_DESTINY}log
- mkdir -p ${BACKUP_DESTINY}exports
- }
- tarfile()
- {
- echo -n "Creating TAR GZIP file..."
- tar -czf "${BACKUP_DESTINY}exports/$3_$2.tar.gz" -C $1 . &
- spinner $!
- }
- deletefile()
- {
- echo -n "Deleting original export..."
- rm -fR $1 &
- spinner $!
- }
- backuphana()
- {
- echo -e "\nStarting HANA instance backup...\n"
- su - ${LOW_USER} -c ". ${HANA_PATH}hdbenv.sh"
- su - ${LOW_USER} -c "hdbsql -U $BACKUP_KEY \"backup data using file ('$BACKUP_PREFIX')\"" &
- echo -n "Performing data backup as ${BACKUP_PREFIX}"
- spinner $!
- }
- createhanafile()
- {
- echo -n "Creating TAR GZIP file from ${BACKUP_PREFIX}"
- HANA_BACKUP_PATH="${HANA_PATH}backup/data/"
- tar -czf ${BACKUP_DESTINY}data/${BACKUP_PREFIX}.tar.gz ${HANA_BACKUP_PATH}${BACKUP_PREFIX}* >/dev/null 2>&1 &
- spinner $!
- }
- backuplogs()
- {
- echo -n "Creating TAR GZIP file from logs as ${LOG_PREFIX}"
- HANA_LOG_BACKUP_PATH="${HANA_PATH}backup/log/"
- tar -czf ${BACKUP_DESTINY}log/${LOG_PREFIX}.tar.gz ${HANA_LOG_BACKUP_PATH}* >/dev/null 2>&1 &
- spinner $!
- }
- deleteoldbackups()
- {
- echo -ne "Deleting old backups"
- HANA_LOG_PATH="${HANA_PATH}backup/log/"
- #find ${HANA_LOG_PATH}* -mtime +${RETENTION} -exec rm {} \; &
- SQL_EXE=$(su - ndbadm -c "hdbsql -U $BACKUP_KEY \"SELECT TOP 1 min(to_bigint(BACKUP_ID)) FROM SYS.M_BACKUP_CATALOG where SYS_START_TIME >= ADD_DAYS(CURRENT_TIMESTAMP, -${RETENTION}) and ENTRY_TYPE_NAME = 'complete data backup' and STATE_NAME = 'successful'\"")
- BACKUP_ID=$(echo -e "${SQL_EXE}" | awk 'NR==2')
- SQL_EXE=$(su - ndbadm -c "hdbsql -U $BACKUP_KEY \"BACKUP CATALOG DELETE ALL BEFORE BACKUP_ID $BACKUP_ID COMPLETE\"") &
- spinner $!
- if [ "${RECLAIM_LOG_SPACE}" == "yes" ]; then
- echo -n "Reclaiming un-needed log space"
- SQL_EXE=$(su - ndbadm -c "hdbsql -U $BACKUP_KEY \"ALTER SYSTEM RECLAIM LOG\"") &
- spinner $!
- fi
- }
- #BEGIN
- MACHINE_EXPORT="${MACHINE_IP}_${SAP_HANA_PORT}"
- WORK_PATH="${BACKUP_PATH}${MACHINE_EXPORT}/${INSTANCE_NAME}/"
- echo "=========================="
- echo "Exxis Backup Tool Ver. 1.0"
- echo "=========================="
- echo -e "\nUsing backup export origin path: \t${BACKUP_PATH}"
- echo -e "Using backup export destiny path: \t${BACKUP_DESTINY}"
- echo -e "Backup retention: \t\t\t${RETENTION} day(s)"
- createdirs
- for DB in ${WORK_PATH}*; do
- DB_NAME="${DB##*/}"
- for BCK in ${DB}/*; do
- BCK_NAME="${BCK##*/}"
- if [ ${BCK_NAME} != "bck_actual" ]; then
- BCK_DATETIME="${BCK_NAME:4:14}"
- BCK_DATE="${BCK_DATETIME:0:8}"
- BCK_TIME="${BCK_DATETIME:8:6}"
- echo -e "\nProcessing export: (${DB_NAME}) ${BCK_NAME}"
- tarfile "${BCK}" "${BCK_DATETIME}" "${DB_NAME}"
- deletefile "${BCK}"
- fi
- done
- done
- backuphana
- if [ "${EXPORT_BACKUP}" == "yes" ]; then
- createhanafile
- backuplogs
- echo
- fi
- deleteoldbackups
- echo -ne "\nProcessing Data..."
- find ${BACKUP_DESTINY}data/* -mtime +$RETENTION -exec rm {} \; &
- spinner $!
- echo -ne "Processing Exports..."
- find ${BACKUP_DESTINY}exports/* -mtime +$RETENTION -exec rm {} \; &
- spinner $!
- echo -ne "Processing Logs..."
- find ${BACKUP_DESTINY}log/* -mtime +$RETENTION -exec rm {} \; &
- spinner $!
- echo -e "\nExxis Backup Tool ended"
- exit 0
- #END