昨天在查看一个adg备库时,偶然发现了一个oracle的大坑,就是审计日志文件(*.aud)过多的问题,在adump目录下竟然有接近500万个aud文件,经查阅资料得知,所有以sysdba用户访问数据库的情况,都会记录一个aud文件在adump目录下,即使audit_trail设置为none,也会记录aud文件。
这样的话,当某些情况频繁以sysdba登录数据库的话,经年累月的定时任务,会导致这个路径下积压大量的aud文件,可想而知,严重情况会导致inode占满,导致OS故障,后果不堪设想。
我们知道默认情况数据库audit_trail参数是设置为db的,这时所有的登录审计日志会记录在aud$表和aud文件里,设置为none,仍然会写aud文件,因此定期清理这个表和aud文件,有时就变得重要了!
1、对于会产生大量aud文件的节点,需要定时删除某个时间以前的aud文件。
2、检查aud$所在表空间情况,如果占用较大,也需要定时清理aud$。
检查这个库的情况如下
SQL> SYS@jkdb2> show parameter audit NAME TYPE VALUE -------------------------- ------------- -------------------------------- audit_file_dest string /u01/app/oracle/admin/jkdb/adump audit_sys_operations boolean FALSE audit_syslog_level string audit_trail string NONE [oracle@jkadg:/u01/app/oracle/admin/jkdb/adump]ll|wc -l 4955917 select count(*) from aud$; COUNT(*) --------------- 230670785 TABLESPACE_NAME TOTAL_GB MAX_GB USED_GB FREE_GB -------------------- ---------- ---------- ---------- ---------- USERS 3 32 2 1 SYSTEM 63 93 2 61 AUD_TBS 43 62 43 0
清理500万aud文件耗时80分钟!
检查aud$表,确认没有近期的审计日志
SYS@jkdb2> select LOGOFF$TIME,INSTANCE#,SESSIONID,TIMESTAMP#,USERID,USERHOST,TERMINAL,PROCESS# from aud$ where LOGOFF$TIME > (sysdate - 180); no rows selected SYS@jkdb2> SELECT * 2 FROM dba_tab_modifications 3 WHERE table_name = 'AUD$' ORDER BY table_name, partition_name; 4 TABLE_OWNER TABLE_NAME PARTITION_ SUBPA INSERTS UPDATES DELETES TIMESTAMP TRU DROP_SEGMENTS -------------------- ------------------------------ ---------- ----- --------------- --------------- --------------- ---------------- --- --------------- SYS AUD$ 315382570 0 84840858 2020-11-22 21:45 YES 0
因此可以清理过旧的数据,可以干脆择机truncate aud$
truncate table aud$;
还要添加cron定时任务,定时清理aud目录。
文章评论