巡检发现系统system表空间达到26G,正常情况下其大小最多几个G。这里发现其只要原因是aud$信息过大导致。
oracle 11g 是默认开启审计DB,在数据库运行过程中,会将审计信息放入aud$中,system表空间就会随之不断扩大,也会带来system表空间的性能下降。
一般处理: truncate table aud$
处理过程:
1.查看aud$所占空间,及审计开启状况
2.按要求备份部分审计信息aud$_bak,在其他用户作为中转备份,这里100为例
3.truncate table aud$
4.将刚才备份的信息再插回aud$表中,insert into aud$
5.删除中间表aud$_bak
6.查看aud$表数据量及system表空间现在大小
7.将新的审计信息迁移至新表空间,不再放在system中
1.查看aud$,发现表已经太大。
select
b.tablespace_name"表空间",
b.bytes/1024/1024 "大小M",
(b.bytes-sum(nvl(a.bytes,0)))/1024/1024"已使用M",
substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5)"利用率"
fromdba_free_space a,dba_data_files b
wherea.file_id=b.file_idandb.tablespace_name='SYSTEM'
groupbyb.tablespace_name,b.file_name,b.bytes
orderbyb.tablespace_name;
SQL> SELECT*FROM(SELECTSEGMENT_NAME,SUM(BYTES) / 1024 / 1024 MB
FROMDBA_SEGMENTS
WHERETABLESPACE_NAME ='SYSTEM'
GROUPBYSEGMENT_NAME
ORDERBY2DESC)
WHEREROWNUM
2.审计已经开启
3. 这里要求保留最近100天的数据量,可以采用exp方式和create table 方式备份,这里采用create table方式
注意:这里临时放在read用户下,要确认此用户所在表空间的剩余空间足够。
Create table read.aud$_bak as SELECT
*
from aud$ where
round((sysdate-cast(NTIMESTAMP#
AS DATE)),0) < 100;
4. 比较aud$_bak和aud$前100天的数据量<