从truncate sys.aud$想到的删除大表的方法

昨天,在11g数据库上发现了sys.aud$表增大到8G左右,清除方法以下:
数据库

第一步
EXEC DBMS_AUDIT_MGMT.INIT_CLEANUP(DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, 12);
第二步
EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, FALSE);
不执行第一步会报ORA-46258错误。
但问题是,在第一次执行第一步的时候,系统会把AUD$表从SYSTEM 表空间move到SYSAUX表空间。
ide

联机文档里的说明以下:
spa

INIT_CLEANUP Procedure

 

This procedure sets up the audit management infrastructure and a default cleanup interval for the audit trail records. If the audit trail tables are in the SYSTEM tablespace, then the procedure moves them to the SYSAUX tablespace.code

 

若是SYSAUX的空间不够,又没有设置autoextend on,就会报错ORA-4626。

ORA-46267: Insufficient space in 'SYSAUX' tablespace, cannot complete operation

因而又找了metalink notes How to Truncate, Delete, or Purge Rows from the Audit Trail Table AUD$ [ID 73408.1],能够对此表进行truncate。ci

但因为是正式库,怕truncate操做会带来其余的一些问题,不直接作truncate,而是执行如下命令:
资源

truncate table sys.aud$ reuse storage;
文档

alter table sys.aud$ deallocate unused keep 8640m;
it

 

alter table sys.aud$ deallocate unused keep 7000m;
io

alter table sys.aud$ deallocate unused keep 6000m;table

...

alter table sys.aud$ deallocate unused keep 10m;

truncate过程1-2分钟以内结束,最后sys.aud$变成10M。

若是想删除大表也能够这么操做(delete操做耗资源),只是不必定那么快释放空间,这还要看具体状况了。

相关文章
相关标签/搜索