Tu je shell skript, ktorým na unixovom serveri mažem rôzne oracle log súbory o ktoré sa nestará ADRCI. Ide hlavne o adump súbory (audit prihlásení do DB).
Funguje ako doplnok k minule riešenému odmazávaniu cez ADRCI.
Funguje ako doplnok k minule riešenému odmazávaniu cez ADRCI.
Tento jednoduchý program je inšpirovaný unixovým príkazom find, jadrom je funkcia "zmazf" ktorá je rozdelená na dve časti, jedna ponechá zadaný počet súborov (posledných).
Druhá časť hľadá cez find súbory staršie ako daný počet dní.
Zdrojový kód:
#!/bin/sh
# ====== CLEANER.SH =======
# BK2 2010
# jednoducha verzia
# =========================
konf="/opt/oracle/bk2/cleaner/cleaner.ini"
# --- UNIVERZALNA FUNKCIA MAZANIA SUBOROV ---
function zmazf {
verbose=1
poceta=0
prvyadr="`find $1 -type d | head -1`"
if [ -d "$prvyadr" ]; then
# ZADANY POCET SUBOROV AKO 3 PARAMETER
if [ "`echo $3 | cut -c3`" != "" ]; then
poc=`ls $1/$2 | wc -l | tr -d " "`
echo " +nechavam poslednych $3 suborov z $poc v $1"
if [ $poc -gt $3 ]; then
# VIAC SUBOROV AKO CHCEME, MAZEME
zpoc=`expr $poc - $3`
for x in `ls -t $1/$2 | tail -$zpoc`; do
echo " $x"
fs=`ls -la $x | awk '{ print $5 }'`
if [ "$fs" != "" ]; then spolu=`expr $spolu + $fs`; fi
poceta=`expr $poceta + 1`
if [ "$zmaz" = "1" ]; then rm -f "$x"; fi
done
fi
else
# ZADANY CAS AKO 3 PARAMETER
find $1 -name "$2" -type f $fol -mtime +$3 2>/dev/null | while read f; do
if [ "$verbose" = "1" ]; then echo " $f";
if [ "$poceta" = "200" ]; then verbose=0; fi
else
if [ "`echo $poceta | grep \"00$\"`" ]; then echo " $poceta files"; fi
fi
fs=`ls -la $f | awk '{ print $5 }'`
if [ "$fs" != "" ]; then spolu=`expr $spolu + $fs`; fi
poceta=`expr $poceta + 1`
if [ "$zmaz" = "1" ]; then rm -f "$f"; fi
done
fi
fi
pocet=`expr $pocet + $poceta`
}
# --- MAIN ------------
# ---------------------
# --- INICIALIZACNA CAST ---
tmpdr="/tmp"
zmaz=0
if [ "$1" = "-d" ]; then zmaz=1; fi
spolu=0
pocet=0
fol="-follow"
df -g | grep -v "var" | awk '{ print $2"\t"$3"\t"$4"\t"$7 }' > $tmpdr/cleaner1.log
echo "+++cleaner start at `date`:"
# --- PEVNE CISTENIA ---
echo " +cistim adump"
zmazf "/opt/oracle/diag/rdbms/*/*/adump" "*.aud" "3"
echo " +cistim alert xml"
zmazf "/opt/oracle/diag/tnslsnr/*/*/alert" "log_*.xml" "3"
if [ -f "$konf" ]; then
echo " +cistim podla suboru cleaner.ini"
for x in `cat $konf | grep -v "^$" | grep -v "^#"`; do
ces="`echo $x | cut -d":" -f1`"
naz="`echo $x | cut -d":" -f2`"
vek="`echo $x | cut -d":" -f3`"
zmazf "$ces" "$naz" "$vek"
done
fi
# --- KONIEC ---
# --------------
spolu=`expr $spolu / 1024`
echo " --zmazane $spolu KB v $pocet suboroch"
if [ "$zmaz" = "1" ]; then
echo " --zmena kapacit na filesysteme:"
# cakame koli postupnemu asynchronnemu uvolneniu diskov po mazani
sleep 13
df -g | grep -v "var" | awk '{ print $2"\t"$3"\t"$4"\t"$7 }' > $tmpdr/cleaner2.log
diff $tmpdr/cleaner1.log $tmpdr/cleaner2.log | grep "%" | sort +2
else
echo "!!!pozor, spusteny beh bez priznaku mazania -d"
fi
V kóde je priamo zadané mazanie adump súborov starších ako 3 dni:
zmazf /opt/oracle/diag/rdbms/*/*/adump *.aud 3
Ďalej xml súbory listenerov staršie ako 3 dni:
zmazf /opt/oracle/diag/tnslsnr/*/*/alert log_*.xml 3
Ak sa na treťom mieste nachádza trojciferné číslo (003), ponechá daný počet najaktuálnejších súborov.
Navyše v danej ceste kontroluje konfiguračný súbor cleaner.ini, do ktorého je možné pridať vlastné nastavenie ciest, príklad:
/opt/oracle/diag/rdbms/DB1/db1/trace:*.trc:050
/opt/oracle/diag/rdbms/DB1/db1/trace:*.trm:050
Skript bez parametra -d simuluje odmazávanie, ale nemaže súbory. Slúži ako testovací beh správnej konfigurácie pred jej zaradením do pravidelného spúšťania z cronu.
Žiadne komentáre:
Zverejnenie komentára