Automatsko brisanje starih “trace” datoteka
Friday, 26.06.2009 – msuticVrlo često se zna dogoditi da primijetite mnogo “trace” datoteka u “user” i “background dump” direktorijima. Na primjer Oracle 11.1.0.6 kreira “trace” datoteku skoro za svaku sesiju, te se nakon nekog vremena direktorij u kojem su pohranjene “trace” datoteke napuni sa mnoštvom *.trc i *.trm datoteka. Kako Oracle 11.1.0.6 baca sve sistemske i korisničke “trace” datoteke u isti direktorij to otežava potražnju za osobnim 10046 ili 10053 “trace” datotekama.
Najvjerojatnije se generiranjeg tog mnoštva datoteka može reducirati omogućavanjem/onemogućavanjem određenih parametara, te planiram detaljnije proučiti dokumentaciju vezano za taj problem. Do tad će mi poslužiti mala skripta koju sam napisao u svrhu brisanja starih “trace” datoteka. Skriptu možete koristiti za verzije Oracle baza od 8i+.
Za brisanje *.trc i *.trm datoteka sam koristio XARGS unix naredbu kako bi izbjegao grešku “Argument list too long” koja se javlja u slučajevima kad imam puno datoteka za izbrisat.
$ ls -l|wc -l
14029
$ rm *.trc *.trm
-bash: /bin/rm: Argument list too long
Skripta:
#!/bin/sh ################################################################# ## BRISANJE TRACE DATOTEKA STARIJIH OD 7 DANA ################### ################################################################# # Postavite Oracle okruženje export ORACLE_BASE=/oracle export ORACLE_SID=test11 export ORACLE_HOME=$ORACLE_BASE/product/11.1.0 export PATH=$ORACLE_HOME/bin:$PATH:$ORACLE_HOME/OPatch:/sbin:/usr/local/bin # Izvucite user i background dump lokacije sqlplus /nolog<< EOF > /tmp/xy.temp connect system/oracle@test11 # OVDJE IZMJENITE LOGIN PARAMETRE column xxxx format a10 column value format a80 set lines 132 SELECT 'xxxx' ,value FROM v\$parameter WHERE name = 'background_dump_dest' / SELECT 'yyyy' ,value FROM v\$parameter WHERE name = 'user_dump_dest' / exit EOF ERR=`less "/tmp/xy.temp"|egrep -c "ORA-|ERROR|no listener"`; if [ $ERR != 0 ] then exit 1; fi; less /tmp/xy.temp | awk '$1 ~ /xxxx/ {print $2}' > /tmp/bkg_dump_dest.temp read BCKDMP_DIR < /tmp/bkg_dump_dest.temp less /tmp/xy.temp | awk '$1 ~ /xxxx/ {print $2}' > /tmp/usr_dump_dest.temp read USRDMP_DIR < /tmp/usr_dump_dest.temp # Brisanje svih trace datoteka starijih od 7 dana find $BCKDMP_DIR \( -name \*.trc -o -name \*.trm \) -type f -mtime +7 -print|xargs rm -f find $USRDMP_DIR \( -name \*.trc -o -name \*.trm \) -type f -mtime +7 -print|xargs rm -f # Ciscenje privremenih datoteka rm -f /tmp/bkg_dump_dest.temp rm -f /tmp/usr_dump_dest.temp rm -f /tmp/xy.temp
Kako bi omogućili automatsko izvršavanje skripte svakoga dana potrebno je dodati “cron” zapis:
0 8 * * * /home/oracle/scripts/clean_old_trcs.sh
(Moja se skripta izvršava svakoga dana u 8:00)
Da bi vam skripta funkcionirala potrebno je prilagoditi Oracle okruženje i login parametre prema vlastitim potrebama.
2 Responses to “Automatsko brisanje starih “trace” datoteka”
Nisam znao za komandu xargs. Ja bih, umesto toga, koristio find sa -exec:
find $BCKDMP_DIR \( -name \*.trc -o -name \*.trm \) -type f -mtime +7 -print -exec rm -f {} \;
By djoka_l on Jul 3, 2009
Da, može se koristiti i “-exec rm -f {}”, iako ja preferiram ipak xargs – specijalno kad se briše veća lista datoteka.
Mislim da je korištenje xargs komande preporućena metoda za ovu svrhu, jer je sa “-exec rm -f {}” znalo biti problema -> u svakom slučaju vrijedi uzeti u obzir xargs komandu 😉
By Marko on Jul 11, 2009