Automatsko brisanje starih “trace” datoteka

Friday, 26.06.2009 – msutic

Vrlo č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.

  1. 2 Responses to “Automatsko brisanje starih “trace” datoteka”

  2. 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

  3. 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

Post a Comment