Oracle审计数据导致系统表空间爆满【案例5】

前言

本文总结了Oracle 11g 和12.1 这两个版本在项目上遇到的关于审计数据导致SYSAUX表空间暴涨的问题。

首先看在11g这个版本下遇到的问题

故障现象

如果system表空间不是自动扩展,空间用满甚至会出现数据库无法登陆。使用任何用户登录均报出异常。

Oracle审计数据导致系统表空间爆满【案例5】

问题分析

你可以运行以下查询来检查一下系统表空间哪些表比较大

select *
  from (select SEGMENT_NAME, sum(bytes) / 1024 / 1024 sx
          from dba_segments
         where tablespace_name = 'SYSTEM'
         group by segment_name)
 where sx > 100
 order by sx desc;
------------------------------------ ----------
AUD$                                 31950
IDL_UB1$                             272

可以看到就正如上面的报错一致问题出现在表AUD$

解决方案

清理AUD$表,关闭数据库审计功能

[email protected]> alter system set audit_trail=none scope=spfile;
System altered.
[email protected]> truncate table AUD$;
Table truncated.
[email protected]> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
[email protected]> startup
ORACLE instance started.
Total System Global Area 1.0088E+10 bytes
Fixed Size 2261928 bytes
Variable Size 2113932376 bytes
Database Buffers 7952400384 bytes
Redo Buffers 19595264 bytes
Database mounted.
Database opened.

而从12c开始,统一审计(Unified Auditing)的审计数据都是存放在AUDSYS schema 下。 

首先,我们看一看AUDSYS schema下的存储对象都有哪些内容。(以下为12.1.0.2环境)

12.1.0.1中,在解决SYSAUX表空间的浪费和空余空间紧张问题,也可以通过查询DBA_SEGMENTS来确认相关数据的大小。

故障现象

SYSAUX表空间爆满,达到了30多个G,导致数据库无法正常操作

问题分析

大数据对象SYS_LOB是表CLI_SWP$XXXX的LOB列LOG_PIECE的存储,并且是securefile LOBs类型。

Oracle审计数据导致系统表空间爆满【案例5】

解决方案

你可以删除不需要的审计数据,如果以后也不想这些数据继续产生,你还可以把这些审计策略无效。

SQL>--删除不需要的审计数据
SQL> exec DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL;
PL/SQL 过程已成功完成。

SQL> BEGIN
2 DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
3 AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
4 USE_LAST_ARCH_TIMESTAMP=> FALSE,
5 CONTAINER => dbms_audit_mgmt.container_current);
6 END;
7 /

PL/SQL 过程已成功完成。

SQL>--无效掉审计策略
SQL> noaudit policy ORA_SECURECONFIG;
Noaudit succeeded.
SQL> noaudit policy ORA_LOGON_FAILURES;
Noaudit succeeded.