oracle11g AUD$维护

时间:2023-03-09 22:52:00
oracle11g AUD$维护

SYSTEM表空间使用率达到了85%,查出是用来记录审计记录的aud$表占用了很大的空间。

备份后truncate掉AUD$,问题临时解决。记得oracle11.2可以把aud$迁移到普通的表空

间。于是试了一把,果然ok。

1.检查SYSTEM表空间使用情况

  1. SQL*Plus: Release 11.2.0.3.0 Production on Mon Mar 26 11:21:18 2012
  2. Copyright (c) 1982, 2011, Oracle.  All rights reserved.
  3. Connected to:
  4. Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
  5. With the Partitioning, Data Mining and Real Application Testing options
  6. SQL>  select  
  7. 2   b.tablespace_name "表空间",
  8. 3  b.bytes/1024/1024 "大小M",
  9. 4  (b.bytes-sum(nvl(a.bytes,0)))/1024/1024 "已使用M",
  10. 5  substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) "利用率"
  11. 6  from dba_free_space a,dba_data_files b
  12. 7  where a.file_id=b.file_id
  13. 8    and b.tablespace_name='SYSTEM'
  14. 9  group by b.tablespace_name,b.file_name,b.bytes
  15. 10  order by b.tablespace_name;
  16. 表空间                 大小M       已使用M   利用率
  17. ------------------- ---------- ----------- ----------
  18. SYSTEM                    4096   3485.9375    85.10

2.从dba_segments中找出占用SYSTEM表空间中排名前10位的大对象。

  1. SQL> col segment_name for a15;
  2. SQL> SELECT *
  3. 2    FROM (SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024 MB
  4. 3            FROM DBA_SEGMENTS
  5. 4           WHERE TABLESPACE_NAME = 'SYSTEM'
  6. 5           GROUP BY SEGMENT_NAME
  7. 6           ORDER BY 2 DESC)
  8. 7   WHERE ROWNUM < 10;
  9. 查出aud$占用的很大的空间。

3.准备truncate aud$表

  1. SQL> show parameter AUDIT_TRAIL
  2. NAME            TYPE        VALUE
  3. --------------- ----------- ---------
  4. audit_trail     string      DB
  5. <span style="color: rgb(255, 0, 0);">-- truncate aud$ 表需要有相关的权限。</span>
  6. SQL> truncate table aud$;
  7. Table truncated

4.truncate后检查system表空间使用情况,发现使用率由85%降低到29.44%

  1. SQL> ANALYZE TABLE aud$  COMPUTE STATISTICS;
  2. Table analyzed.
  3. SQL>  select  
  4. 2    b.tablespace_name "表空间",
  5. 3    b.bytes/1024/1024 "大小M",
  6. 4    (b.bytes-sum(nvl(a.bytes,0)))/1024/1024 "已使用M",
  7. 5    substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) "利用率"
  8. 6    from dba_free_space a,dba_data_files b
  9. 7    where a.file_id=b.file_id
  10. 8     and b.tablespace_name='SYSTEM'
  11. 9    group by b.tablespace_name,b.file_name,b.bytes
  12. 10   order by b.tablespace_name;
  13. 表空间                大小M    已使用M   利用率
  14. ---------------- ---------- ----------   ----------
  15. SYSTEM                 4096       1206   29.44

5.为了避免system表空间爆满对数据的影响,把aud$从system表空间迁移到普通表空间AUD_FILE。

    1. SQL>  BEGIN
    2. 2   DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(
    3. 3   AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
    4. 4   AUDIT_TRAIL_LOCATION_VALUE => 'AUD_FILE');
    5. 5   END;
    6. 6  /
    7. SQL> col owner for a5;
    8. SQL> SELECT OWNER, TABLE_NAME, TABLESPACE_NAME
    9. 2    FROM DBA_TABLES
    10. 3   WHERE TABLE_NAME = 'AUD$'
    11. 4     AND OWNER = 'SYS';
    12. OWNER TABLE_NAME    TABLESPACE_NAME
    13. ----- ------------------------------ ------------------------------
    14. SYS   AUD$                           TD_FILB