【案例5】Oracle審計數據導致系統表空間爆滿

前言

本文總結了Oracle 11g 和12.1 這兩個版本在項目上遇到的關於審計數據導致SYSAUX表空間暴漲的問題。

首先看在11g這個版本下遇到的問題

故障現象

如果system表空間不是自動擴展,空間用滿甚至會出現數據庫無法登陸。使用任何用戶登錄均報出異常。

問題分析

你可以運行以下查詢來檢查一下系統表空間哪些表比較大

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$表,關閉數據庫審計功能

sys@ZFRORA> alter system set audit_trail=none scope=spfile;
System altered.
sys@ZFRORA> truncate table AUD$;
Table truncated.
sys@ZFRORA> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ZFRORA> 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類型。

 

解決方案

你可以刪除不需要的審計數據,如果以後也不想這些數據繼續產生,你還可以把這些審計策略無效。

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.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章