一、背景
Oracle数据库开启审计功能后,默认会将审计日志以文件形式存储在$ORACLE_BASE/admin/$ORACLE_SID/adump目录下。长期运行可能导致大量小文件积累,耗尽文件系统的inode资源。
二、检查当前inode使用情况
使用以下命令检查文件系统inode使用情况:
df -ils -f | wc -l三、清理历史审计日志
如有需要,先备份:
# 备份最近30天的审计文件 find $ORACLE_BASE/admin/$ORACLE_SID/adump -name "*.aud" -mtime -30 -exec cp {} /backup/audit/ \;验证要删除的审计文件:
删除在oracle审计文件夹下,文件后缀名为.aud,修改时间距离现在超过 30 天的文件
生产环境务必先验证再删除!生产环境务必先验证再删除!生产环境务必先验证再删除!
# 1. 预览待删文件(必做!) find $ORACLE_BASE/admin/$ORACLE_SID/adump -type f -name "*.aud" -mtime +30 -print > /tmp/aud_delete_preview_$(date +%Y%m%d).log手动清理旧的审计日志文件:
#建议使用 无需创建额外进程,直接由find内核态操作,文件越多效率越高(审计日志通常成百上千个,优势明显) find $ORACLE_BASE/admin/$ORACLE_SID/adump -type f -name "*.aud" -mtime +30 -delete 或 #有日志版 find $ORACLE_BASE/admin/$ORACLE_SID/adump -type f -name "*.aud" -mtime +30 -delete 2>&1 > /tmp/aud_delete_$(date +%Y%m%d).log #可以但不建议,效率低 每找到 1 个文件,就 fork1 个rm进程(文件多时有大量进程开销) # 删除30天前的审计文件 find $ORACLE_BASE/admin/$ORACLE_SID/adump -name "*.aud" -mtime +30 -exec rm {} \;四、定期维护计划
0 3 * * * find $ORACLE_BASE/admin/$ORACLE_SID/adump -type f -name "*.aud" -mtime +30 -delete 2>&1 > /tmp/aud_delete_$(date +%Y%m%d).log