adump一般位于$ORACLE_BASE目录下,主要记录具有sysdba或者sysoper权限的用户的登录行为等,这个是强制记录的,即使设置了database audit trail (如设置AUDIT_TRAIL parameter = DB),oracle也会强制记录并产生audit file.
问题是,如果长期不删除,adump下会保留相当多的audit file,共有3590164个文件
ls -1 -f|wc -l
3590164
ls命令执行起来非常慢,花费了18分钟之久
time ls -alh
......文件输出省略
real 18m1.764s
user 1m12.998s
sys 1m28.491s
这是因为默认情况下,“ls”命令将对其输出进行排序。 为此,它必须首先将每个文件的名称读入内存。 面对一个非常大的目录,它会一个一个的读取文件名,并占用越来越多的内存,直到最终按字母数字顺序一次列出所有文件。
我们将ls命令的参数改一下,使用如下-1、与-f参数:
-1 list one file per line
-f do not sort, enable -aU, disable -lst
time ls -1 -f
......文件输出省略
real 2m57.107s
user 0m3.448s
sys 0m13.646s
这次输出只花了近3分钟,已经较之前改善很多了
如果要删除,可以使用:
time ls -1 -f |xargs -i rm {}
或者删除指定时间段内的文件
find $ORACLE_BASE/admin/orcl/adump -mtime +2 -type f |xargs -i rm -f {}
当然,由于这些文件记录了sysdba与sysoper权限的用户的登录行为,不需要保留太久,最好将后者放到crontab内,排程周期性的执行