手动清理Oracle审计记录(3)

--也可以通过创建一个purge Job来进行清理已归档的历史审计记录
SQL> BEGIN
  2    DBMS_AUDIT_MGMT.CREATE_PURGE_JOB(
  3      AUDIT_TRAIL_TYPE          => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
  4      AUDIT_TRAIL_PURGE_INTERVAL => 24 /* hours */,
  5      AUDIT_TRAIL_PURGE_NAME    => 'Daily_Audit_Purge_Job',
  6      USE_LAST_ARCH_TIMESTAMP    => TRUE
  7    );
  8  END;
  9  /

PL/SQL procedure successfully completed.

-- 本次测试使用了job进行清理,注,上面的purge job 并非使用DBMS_SCHEDULER.CREATE_JOB创建
-- 执行job用于清理归档,通过观察,由于redo log size为50MB,切换较为频繁,花费了19分钟
-- 同时伴随有Checkpoint not complete等待事件,可见redo size过小
SQL> exec DBMS_SCHEDULER.RUN_JOB(job_name => 'SYS.DAILY_AUDIT_PURGE_JOB');

PL/SQL procedure successfully completed.

Elapsed: 00:19:26.38

SQL> select count(*) from AUD$;

COUNT(*)
----------
        12

--经查看,清理后空间并没有释放       
SQL> select segment_name,bytes/1024/1024 from dba_segments where segment_name='AUD$';

SEGMENT_NAME                  BYTES/1024/1024
------------------------------ ---------------
AUD$                                      1152

SQL> alter table sys.aud$ shrink space cascade;
alter table sys.aud$ shrink space cascade
*
ERROR at line 1:
ORA-10636: ROW MOVEMENT is not enabled

SQL> alter table sys.aud$ enable row movement;

Table altered.

SQL> alter table sys.aud$ shrink space cascade;

Table altered.

SQL> alter table sys.aud$ disable row movement;

Table altered.

-- 下面的查询可以看到,空间已经被释放
SQL> select segment_name,bytes/1024/1024 from dba_segments where segment_name='AUD$';

SEGMENT_NAME        BYTES/1024/1024
-------------------- ---------------
AUD$                          .0625

四、小结
a、对于Oracle 11g,审计功能默认被开启,因此如果在必须启用的情况下应考虑性能影响;
b、开启审计的情况下,建议将审计从system或sysaux表空间剥离,使用单独的表空间;
c、对于历史审计日志的清除,应考虑清除期间所带来的性能影响;
d、调用DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION这个过程已经开始了搬迁过程,如果审计日志很庞大,应考虑IO影响;
e、审计日志的清除需要先设定归档,已归档的审计日志会被清理;
f、也可以通过trunate table aud$ reuse storage以及deallocate非常规方式来处理。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3154995123f9a320c228758e97b79abf.html