vcSnapshot.sh
This script uses an include file (inc_system.sh) for common\system variables as shown here.
#!/bin/bash
# Purpose: Export packages, functions and related metadata.
# Version: 2019.09.11
# Dependencies: inc_system.sh
#
# usrDirObj & usrDirExp
# mkdir /u03/exports/vc
# CREATE OR REPLACE DIRECTORY VC AS '/u03/exports/vc';
# GRANT read,write ON DIRECTORY VC TO system;
#
# usrScpDest
# mkdir /mnt/smb01/exports/vc
##################################################################
######################################
# Preamble: 2018.10.01 #
######################################
set -a; DIR_SCRIPTS="/u01/app/scripts"; source $DIR_SCRIPTS/inc_system.sh
sFullName=$(basename "$0"); me=${sFullName%.*}
sSLog="$DIR_LOGS/$me.sess.log"; sHLog="$DIR_LOGS/$me.hist.log"; > $sSLog
if [[ $MAINT_WINDOW -eq 1 ]]; then printf "Maintenance Window Detected - Exiting\n"; exit; fi
# User Vars
usrDirExp="/u03/exports/vc"; # Dir for export .dmp Files. Ex: "/u03/exports/vc"
usrDirExpRet=30; # Days to keep on DirObj dir. 0=DontDelete
usrDirObj="VC"; # Oracle DirObj used for export. SELECT * FROM dba_directories;
usrDpUn="system"; # Data Pump username.
usrDpPW="********";
usrOraSID="myinstance"; # ORACLE_SID of database for export. Case sensitive!
usrEmailList="scott@mycompany.com"; # Space delimited list of email address to get warnings.
usrScpMtPt="/mnt/smb01";
usrScpDest="root@localhost:$usrScpMtPt/exports/vc";
usrScpPW="********";
usrScpDelLocal=0; # If value is 1 .dmp file deleted from usrDirExp after SCP (overrides usrDirExpRet).
######################################
# Init Script Actions\Functions\Vars #
######################################
# Vars
nExpStatus=1;
sDateStr=$(date "+%Y%m%d")
ORACLE_SID="$usrOraSID";
sParFile="$DIR_TMP/$me.$ORACLE_SID.par"
sExpFile="$me.$ORACLE_SID.$sDateStr";
######################################
# Start #
######################################
clear; log "$sSLog" "$sFullName Started"; linesep
SysVars_show
printf "ORACLE_SID: $ORACLE_SID\n"
printf "sParFile: $sParFile\n"
printf "sExpFile: $sExpFile\n"
linesep
printf "usrDirObj: $usrDirObj\n"
printf "usrDirExp: $usrDirExp\n"
printf "usrScpDest: $usrScpDest\n"
linesep "="
sleep 5
# Sweep
log "$sSLog" "Sweeeping"
rm $usrDirExp/$sExpFile.* > /dev/null 2>&1
rm $sParFile > /dev/null 2>&1
# Retention Mgr
log "$sSLog" "Retention Mgr"
if [[ $usrDirExpRet -ne 0 ]]; then
find $usrDirExp/*.dmp -type f -mtime +$usrDirExpRet -delete > /dev/null 2>&1
find $usrDirExp/*.log -type f -mtime +$usrDirExpRet -delete > /dev/null 2>&1
fi
# Create .par File
log "$sSLog" "Create .par File"
cat > $sParFile <<EOF
# Created By: $sFullName
CLUSTER=N
COMPRESSION=METADATA_ONLY
COMPRESSION_ALGORITHM=HIGH
DIRECTORY=$usrDirObj
DUMPFILE=$sExpFile.dmp
EXCLUDE=STATISTICS
FILESIZE=32g
FULL=YES
JOB_NAME=$me
LOGFILE=$sExpFile.log
CONTENT=METADATA_ONLY
PARALLEL=1
REUSE_DUMPFILES=YES
EOF
# Export
log "$sSLog" "Executing expdp ($ORACLE_SID)"
$ORACLE_HOME/bin/expdp $usrDpUn/$usrDpPW PARFILE=$sParFile
if [[ $? -eq 1 ]]; then
log "$sSLog" "Export QC Check FAILED ($?)"
mail -s "$HOSTNAME.$sFullName $ORACLE_SID Error" "$usrEmailList" <<< "Export QC Check: FAILED"
else
log "$sSLog" "Export QC Check: PASSED ($?)"
nExpStatus=0
fi
# If Export OK: SCP
if [[ $nExpStatus -eq 0 ]]; then
# SCP
if ! [[ -z "$usrScpDest" ]]; then
# SCP: Operation
if [[ $(findmnt -rno SOURCE $usrScpMtPt) ]]; then
log "$sSLog" "SCP: Operation"
sshpass -p "$usrScpPW" scp $usrDirExp/$sExpFile.dmp $usrScpDest
# SC: QC
if [[ $? -eq 0 ]]; then
log "$sSLog" "SCP Operation: OK"
# Delete .dmp File?
if [[ $usrScpDelLocal -eq 1 ]]; then
log "$sSLog" "Deleting Local .dmp File"
rm $usrDirExp/$sExpFile.*
fi
else
log "$sSLog" "SCP Operation: FAILED"
mail -s "$HOSTNAME.$sFullName $ORACLE_SID Error" "$usrEmailList" <<< "SCP Operation: FAILED"
fi
fi
fi
fi
######################################
# End #
######################################
log "$sSLog" "$sFullName Ended [Elapse Time: $(elapse)]";
echo $(linesep "=") >> $sHLog; cat $sSLog >> $sHLog;
tail -32768 $sHLog > $sHLog.tmp; mv $sHLog.tmp $sHLog