本文链接地址:http://blog.chinaunix.net/uid-31396856-id-5753298.html
一、问题
某数据库system表空间增长比较快
由上图知道:
System表空间为12个G的使用空间;
检查system表空间的数据库对象大小,发现表fga_log$的大小为10g,如下图:
这是和oracle审计相关的表,还有个表是日志表aud$。
如果业务的高峰或者陡增,会带来数据库审计的相关日志数据和审计策略数据迅速增长,进而会导致数据库system表空间的增长,以及段自动扩展带来的IO等待。
二、解决方案
2.1临时解决方案
增加system表空间的数据文件大小,扩展为24G甚至更大;
Alter datebasedatafile ‘数据文件名’resize 24G;
2.2解决方案
建议方案1:
关闭审计。操作如下:
Alter system set audit_trail=none scope=spfile;
然后重启数据库。
建议方案2:
分离审计数据,将审计的相关表迁移到新的表空间。思路如下:
1、建立新的表空间用于存储数据库审计相关数据:audit_tbs
2、迁移表和数据。
三、迁移操作步骤
1) 检查审计表现在所在表空间
CONN / AS SYSDBA
SQL> SELECT table_name, tablespace_name FROM dba_tables
WHERE table_name IN ('AUD$', 'FGA_LOG$') ORDER BY table_name; 2
TABLE_NAME TABLESPACE_NAME
------------------------------ ----
--------------------------
AUD$ SYSTEM
FGA_LOG$ SYSTEM
2)检查2个表的现在数据量:
selectsegment_name,bytes/1024/1024 size_in_megabytes from dba_segments wheresegment_name in ('AUD$','FGA_LOG$');
SEGMENT_NAME SIZE_IN_MEGABYTES
------------------- -----------------------------
FGA_LOG$ 10380
AUD$ .6875
3) 创建新表空间
SQL>createtablespace audit_tbs datafile size 100Mautoextend on;
Tablespace created.
4) 迁移存储表
使用存储过程:DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION.
迁移aud$
SQL> BEGIN
DBMS_AUDIT_MGMT.set_audit_trail_location(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,--this moves tableAUD$
audit_trail_location_value => 'AUDIT_TBS');
END;
/
PL/SQL procedure successfully completed.
迁移FGA_LOG$表
SQL> BEGIN
DBMS_AUDIT_MGMT.set_audit_trail_location(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,--this moves tableFGA_LOG$
audit_trail_location_value => 'AUDIT_TBS');
END;
/
PL/SQL procedure successfully completed.
4) 检查迁移结果:
SQL> SELECTtable_name, tablespace_name FROM dba_tables
WHERE table_name IN ('AUD$','FGA_LOG$') ORDER BY table_name;
TABLE_NAME TABLESPACE_NAME
----------------------- ------------------------------
AUD$ AUDIT_TBS
FGA_LOG$ AUDIT_TBS
---the end