=====Oracle Audit Log Files unter Linux löschen===== **Das Problem:** Mit der Zeit sammlen sich die SYS audit connections Logs im Audit Verzeichnis auf der Platte an. Besonders in einer Oracle Cluster Umgebung kommen hier schnell mal ein paar hundertausend oder gar Millionen von Dateien zusammen. Ein einfaches "rm *" führt hier dann nicht mehr zum gewünschten Ziel! Die Schell kann das bei solche großer Anzahl nicht mehr expandieren! Neuere Dateien sollen zudem noch aufgehoben werden und ab einer gewissen Menge an Dateien ist ein "*" gar keine gute Idee mehr! Siehe dazu aber auch die Möglichkeit das intern mit => [[dba:oracle_clean_audit_log_entries|Die Audit Logs der Datenbank unter Oracle 11g/12c mit DBMS_AUDIT_MGMT "aufräumen"]] . ---- ====Lösung A: Über Find mit dem Datei Datum löschen:==== Finde all die älter als 160 Tage sind: #Liste die Anzahl über die Tage auf: ls -la | awk '{ print $7 "-" $6 }' | sort | uniq -c #Alternativ über stat !Langsamer find . -name "*.aud" -exec stat -c %y {} \; | awk '{ print $1 }' | sort | uniq -c #Lösche Dateien die älter als 160 Tage sind: find . -name "*" -mtime +160 -exec rm {} \; ---- ====Lösung B: Mit einem Script automatisieren:==== * Timestamp ermitteln ab dem gelöscht werden soll mit "date --date "now -6 months" +"%s". * Loop über alle Files * Test wie alt die Datei ist, wenn älter als xxx dann löschen Skript: #!/bin/sh FILES=/u01/app/11.2.0.4/grid/rdbms/audit/*.aud LOG_FILE=/tmp/aud_delete_logs_list.log DATE_NOW_EPOCH=`date +%s` #Get the epoch 6 Month ago DATE_DELETE_OLDER=`date --date "now -6 months" +"%s"` echo "Info - check the age of the file - start at -- `date` -- " > $LOG_FILE for f in $FILES do #File date as epoch FILE_DATE=`stat -c %Y ${f}` FILE_LOG_DATE=`stat -c %y ${f}` if [[ $FILE_DATE -lt $DATE_DELETE_OLDER ]]; then echo "Info - delete :: ${FILE_LOG_DATE} ${f}" >> $LOG_FILE rm ${f} fi done echo "Info - finish at -- `date` -- " >> $LOG_FILE Das kann dann automatisiert regelmäßig laufen und die Umgebung "säubern".