#!/usr/bin/ksh # # RMAN DB backup with incremental Merge # Written for HCL / Nokia # v1.0 - James Pattinson - November 2025 # # usage: rman_db.ksh _SCRIPT_="$0" get_script_dir() { script="$1" case "$script" in /*) abs_path="$script" ;; *) abs_path="$PWD/$script" ;; esac while [ -L "$abs_path" ]; do link=$(readlink "$abs_path") case "$link" in /*) abs_path="$link" ;; *) abs_path="$(dirname "$abs_path")/$link" ;; esac done script_dir=$(dirname "$abs_path") cd "$script_dir" 2>/dev/null && pwd } MYDIR=$(get_script_dir "$_SCRIPT_") . $MYDIR/rubrik.conf . $MYDIR/oracle_funcs.ksh set_oracle_env $1 export NLS_DATE_FORMAT='mm-dd-yyyy hh24:mi:ss' export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 usage() { echo "Usage: $0 ]" 1>&2 exit 1 } if [ -z "${ORACLE_SID}" ]; then usage fi MOUNTPOINT=$MOUNTPOINT_PREFIX/$ORACLE_SID/data mkdir -p $RMAN_LOG_DIR/$ORACLE_SID/ RMAN_LOG=$RMAN_LOG_DIR/$ORACLE_SID/rman_${ORACLE_SID}_DB_$(date +%d%m%y).log # Disk space check dusage=$(df -Pk | 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 get_data_mv open_mv echo "DEBUG: numChannels=$numChannels, MOUNTPOINT=$MOUNTPOINT" if [ $? -ne 0 ]; then echo ERROR: Unable to open MV, aborting exit_with_error fi echo Running RMAN with log to $RMAN_LOG # Default RMAN channels per mount if not set RMAN_CHANNELS_PER_MOUNT=${RMAN_CHANNELS_PER_MOUNT:-1} total_channels=$(expr $numChannels \* $RMAN_CHANNELS_PER_MOUNT) if [ $total_channels -eq 1 ]; then allocate="allocate channel 'ch1' device type disk format '$MOUNTPOINT/%U';" release="release channel ch1;" channel0="$MOUNTPOINT" else allocate="" release="" i=0 while [ $i -lt $numChannels ]; do j=0 while [ $j -lt $RMAN_CHANNELS_PER_MOUNT ]; do suffix=$(echo $j | tr '0123456789' 'abcdefghijklmnopqrstuvwxyz') allocate="$allocate allocate channel 'c${i}${suffix}' device type disk format '$MOUNTPOINT/c$i/%U';" release="$release release channel c${i}${suffix};" j=$(expr $j + 1) done i=$(expr $i + 1) done channel0="$MOUNTPOINT/c0" fi # Save the current time (minus one hour) to ensure we catch all archive logs startTime=$(perl -e 'use POSIX qw(strftime); $time = time() - 3600; print strftime("%m-%d-%Y %H:%M:%S", localtime($time))') # RMAN Part Here ############################################################################### #cat > /tmp/rman.cmd < /dev/null </dev/null close_mv