oracle审计日志数据和文件清理

2021年6月4日 1404点热度 0人点赞 0条评论

昨天在查看一个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目录。

liking

这个人很懒,什么都没留下

文章评论