Files
nokia-hpux-oracle/rman_logs.sh
2025-10-24 16:56:57 +01:00

136 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
#
# RMAN Log backup
# Written for Avon
# v1.1 - James Pattinson - October 2023
#
# usage: rman_logs.sh <ORACLE_SID>
MYDIR="$(dirname "$(readlink -f "$0")")"
export ORACLE_SID=$1
. $HOME/.profile
export ORAENV_ASK=NO
export ORACLE_SID=$1
. oraenv
export ORAENV_ASK=YES
source $MYDIR/rbk_api.conf
source $MYDIR/oracle_funcs.sh
#ORACLE_SID=$1
usage() { echo "Usage: $0 <DBNAME>]" 1>&2; exit 1; }
if [ -z "${ORACLE_SID}" ]; then
usage
fi
#ORAENV_ASK=NO
#. oraenv
export NLS_DATE_FORMAT='mm-dd-yyyy hh24:mi:ss'
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
mkdir -p $RMAN_LOG_DIR/$ORACLE_SID/
RMAN_LOG=$RMAN_LOG_DIR/$ORACLE_SID/rman_${ORACLE_SID}_LOG_$(date +%d%m%y).log
get_log_mv
open_mv
if [ $? -ne 0 ]; then
echo ERROR: Unable to open MV, aborting
exit_with_error
fi
if [[ $logMvPresent -eq 1 ]] && [[ $numChannels -eq 1 ]] ; then
MOUNTPOINT=$MOUNTPOINT_PREFIX${ORACLE_SID}_log
else
MOUNTPOINT=$MOUNTPOINT_PREFIX$ORACLE_SID
fi
# Disk space check
dusage=$(df -Ph | grep -E "$MOUNTPOINT" | sed s/%//g | awk -v spaceWarn=$MV_SPACE_WARN '{ if($5 >= spaceWarn) print $0;}')
if [ "$dusage" != "" ]; then
echo "WARNING: Disk Space Alert - sending email"
echo "$dusage" | mailx -s "WARNING: Rubrik MV Disk Space Alert On $(hostname) at $(date)" $ALERT_EMAILS
else
echo "INFO: Rubrik MV Disk usage is under threshold of ${MV_SPACE_WARN}%"
fi
echo Running RMAN with log to $RMAN_LOG
if [[ $numChannels -eq 1 ]]; then
allocate="allocate channel 'ch1' device type disk format '$MOUNTPOINT/%U';"
release="release channel ch1;"
channel0="$MOUNTPOINT"
else
for i in $(seq 0 $(($numChannels - 1))); do
allocate+="allocate channel 'c$i' device type disk format '$MOUNTPOINT/log_c$i/%U';"
release+="release channel c$i;"
done
channel0="$MOUNTPOINT/log_c0"
fi
# RMAN Part Here
###############################################################################
rman nocatalog log $RMAN_LOG append > /dev/null <<EOF
connect target /
set echo on;
show all;
crosscheck backup;
run {
set controlfile autobackup format for device type disk to '$channel0/cf_%F';
$allocate
backup archivelog all not backed up 1 times tag 'RUBRIK_LOGS';
$release
}
allocate channel for maintenance device type disk;
delete noprompt backup of archivelog all completed before 'sysdate-3' tag RUBRIK_LOGS;
release channel;
EOF
###############################################################################
rmanStatus=$?
if [ $rmanStatus -ne 0 ]; then
echo "WARNING: RMAN Log backup exited with Non-zero status $rmanStatus. Emailing log"
cat $RMAN_LOG | mailx -s "RMAN Log backup Failed on ${HOST} for ${ORACLE_SID}" $ALERT_EMAILS
elif [ $EMAIL_SUCCESS -eq 1 ]; then
echo "SUCCESS: RMAN Log backup exited with zero status"
echo "RMAN job finished with Zero status. Note that this does not guarantee the contents of the backup." | mailx -s "SUCCESS: RMAN Log backup exited with zero status on ${HOST} for ${ORACLE_SID}" $ALERT_EMAILS
fi
# Change permission of backup files to enable alternate host restore
find $MOUNTPOINT -type f -exec chmod 644 -- {} + 2>/dev/null
close_mv
if [[ $HOSTLOGRET -gt 0 ]]; then
echo "Starting post-backup RMAN log purge"
# Remove archivelogs from host after backup
###############################################################################
rman nocatalog log $RMAN_LOG append > /dev/null <<EOF
connect target /
set echo on;
run {
delete noprompt archivelog until time 'sysdate-$HOSTLOGRET/24' backed up 1 times to device type disk;
}
EOF
###############################################################################
rmanStatus=$?
if [ $rmanStatus -ne 0 ]; then
echo "WARNING: RMAN purge exited with Non-zero status $rmanStatus. Emailing log"
cat $RMAN_LOG | mailx -s "RMAN purge on ${HOST} for ${ORACLE_SID} " $ALERT_EMAILS
fi
fi