archive delete script based on disk usage using archive file type of Linux (Linux archive file type 기반의 디스크 사용량에 따른 archive 삭제 스크립트)
Linux (OEL) OS 기반의 archive file type 을 사용하는 Oracle 에 대한 디스크 사용량에 따른 archive 삭제 스크립트를 소개한다.
crontab registration and archive_del.sh files must be created as oracle user.
# Crontab
#delete archive logs when it's over 20%
00 * * * * sh /dbwork/script/archive/archive_del.sh > /dbwork/script/archive/log/archive_del_ORAP_$(date +'\%Y\%m\%d_\%H\%M').log
# /dbwork/script/archive/archive_del.sh
# Delete archive logs when it's over 20%
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0/dbhome_1
export ORACLE_SID=ORAP
export ORACLE_TERM=xterm
export BASE_PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export BASE_DIR='/dbwork/script/archive'
export LOG_DIR=$BASE_DIR/log
#Archive Path
ARCHIVE_DIR="/archive/ORAP"
#Number of log files remaining
MAX_ARCHIVE_COUNT=10
#Disk Usage
DISK_USAGE=$(df -h $ARCHIVE_DIR | awk 'NR==2{print $5}' | cut -d'%' -f1)
df -h $ARCHIVE_DIR
echo ""
#Delete when it's over 20%
if [ $DISK_USAGE -gt 20 ]; then
echo "Disk usage is above 20%. Deleting archive logs."
CURRENT_ARCHIVE_COUNT=$(ls $ARCHIVE_DIR | wc -l)
FILES_TO_DELETE=$((CURRENT_ARCHIVE_COUNT - MAX_ARCHIVE_COUNT))
#Delete archive logs.
for file in $(ls -rt $ARCHIVE_DIR/*.arc | head -n $FILES_TO_DELETE); do
echo "Deleting: $file"
rm $file
done
echo "Archive logs deleted."
echo ""
df -h $ARCHIVE_DIR
echo ""
#Delete expired archive logs.
echo "Delete expired archive logs."
rman target / <<EOF
CROSSCHECK ARCHIVELOG ALL;
DELETE EXPIRED ARCHIVELOG ALL;
YES
exit
EOF
else
echo "Disk usage is below 20%. No action required."
fi
반응형
댓글