system01.dbf文件过大——SYSTEM表空间AUD$使用空间过大问题处理
作者:互联网
巡检时发现oracle数据库的system01.dbf数据文件超大,有32G大小,下面对system01.dbf进行排查占用大的问题及缩小空间
1、检查system表空间中占用空间最大对象
SELECT * FROM (SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024 MB FROM DBA_SEGMENTS WHERE TABLESPACE_NAME = 'SYSTEM' GROUP BY SEGMENT_NAME ORDER BY 2 DESC) WHERE ROWNUM < 10;
aud$为审计功能
或用下面语句查看更详细些
查看system表空间中各个段占用空间的情况:
SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, SUM(BYTES)/1024/1024 FROM DBA_SEGMENTS WHERE TABLESPACE_NAME = 'SYSTEM' and rownum<20 GROUP BY OWNER, SEGMENT_NAME, SEGMENT_TYPE ORDER BY 4;
2、截断占用空间最大的AUD$表(需要确认审计信息是否需要保留):
---查看该表的大小:
SQL> select TABLE_NAME,NUM_ROWS,BLOCKS*8192/1024/1024/1024 from dba_tables where table_name='AUD$';
SQL> select bytes/1024/1024/1024 from dba_segments where segment_name='AUD$';
---清除aud$的数据
SQL> truncate table sys.AUD$; 或 truncate table aud$;清除都可 Table truncated. SQL> select bytes/1024/1024/1024 from dba_segments where segment_name='AUD$'; BYTES/1024/1024/1024 -------------------- .000061035
---查看system表空间的大小
SQL> SELECT a.tablespace_name, a.bytes/1024/1024/1024 total, b.bytes/1024/1024/1024 used, c.bytes free, (b.bytes * 100) / a.bytes "% USED ", (c.bytes * 100) / a.bytes "% FREE " FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c WHERE a.tablespace_name = b.tablespace_name AND a.tablespace_name = c.tablespace_name and a.tablespace_name='SYSTEM';
* system空间已回收,可根据审计文件信息是否需要,如若需要部分审计信息可用delete删除3、更改AUD$表的表空间为其他表空间(视情况而定)
BEGIN DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, AUDIT_TRAIL_LOCATION_VALUE => '&AUD_TBS_NAME'); END;
4、若确认不需要审计,直接将审计功能关闭
alter system set audit_trail=none scope=spfile;
需要重启才生效
5、释放system01.dbf文件占用空间
---查询可以计算出来一个数据文件可以resize到的大小:
select a.file#, a.name, a.bytes/1024/1024 CurrentMB, ceil(HWM * a.block_size)/1024/1024 ResizeTo, (a.bytes - HWM * a.block_size)/1024/1024 ReleaseMB, 'alter database datafile '''||a.name||''' resize '|| ceil(HWM * a.block_size/1024/1024) || 'M;' ResizeCMD from v$datafile a, ( select file_id, max(block_id+blocks-1) HWM from dba_extents group by file_id) b where a.file# = b.file_id(+) and (a.bytes - HWM *block_size)>0 order by 5; FILE# ---------- NAME ------------------------------------------------------------------------------------------------------------------------------------------------------ CURRENTMB RESIZETO RELEASEMB ---------- ---------- ---------- RESIZECMD ------------------------------------------------------------------------------------------------------------------------------------------------------ 1 /u01/app/oracle/oradata/utf8/system01.dbf 32730 1277.99219 31452.0078 alter database datafile '/u01/app/oracle/oradata/utf8/system01.dbf' resize 1278M;
---然后执行下列语句,system01文件即可到释放到1G的空间
alter database datafile '/u01/app/oracle/oradata/utf8/system01.dbf' resize 1278M;
标签:1024,AUD,NAME,system01,bytes,过大,name 来源: https://blog.51cto.com/meiling/2483056