Chinaunix首页 | 论坛 | 博客
  • 博客访问: 780950
  • 博文数量: 99
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1163
  • 用 户 组: 普通用户
  • 注册时间: 2016-09-22 09:50
个人简介

一个守望数据库的老菜鸟

文章分类

全部博文(99)

文章存档

2019年(21)

2018年(17)

2017年(37)

2016年(24)

我的朋友

分类: Oracle

2016-10-13 17:30:56

博客文章除注明转载外,均为原创。转载请注明出处。
本文链接地址: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 datebase datafile ‘数据文件名’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个表的现在数据量: 

select segment_name,bytes/1024/1024 size_in_megabytes from dba_segments where segment_name in ('AUD$','FGA_LOG$');

SEGMENT_NAME         SIZE_IN_MEGABYTES
-------------------  -----------------------------
FGA_LOG$                   10380

AUD$                       .6875



3) 创建新表空间 

SQL>create tablespace audit_tbs datafile  size 100M autoextend 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 table AUD$
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 table FGA_LOG$
audit_trail_location_value => 'AUDIT_TBS');
END;
/
PL/SQL procedure successfully completed.



4) 检查迁移结果: 

SQL> SELECT table_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

阅读(5723) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~