博客文章除注明转载外,均为原创。转载请注明出处。
Oracle sysaux表空间使用过大处理第三篇,前两篇请见
Oracle sysaux表空间使用过大处理-1(http://blog.chinaunix.net/uid-31396856-id-5819732.html)和Oracle sysaux表空间使用过大处理-2(http://blog.chinaunix.net/uid-31396856-id-5819835.html)
前面2篇都是用了非常规手段。其实awr资料库清理的常规办法是使用dbms_workload_repository.drop_snapshot_range来清理:
但是这种清理的效率非常的低,因此在介绍一种比较高效率的清理方式:
1、检查快照信息
SYS@transdb-10.x.x.xxx>select min(snap_id),max(snap_id) from WRH$_ACTIVE_SESSION_HISTORY;
MIN(SNAP_ID) MAX(SNAP_ID)
------------ ------------
1 43100
SYS@transdb-10.x.x.xxx>select min(snap_id),max(snap_id) from dba_hist_snapshot;
MIN(SNAP_ID) MAX(SNAP_ID)
------------ ------------
42894 43100
有以上可知,我们根据awr信息资料库保留策略,保留snap_id >=42894的信息。
2.查找到那些占用sysaux表空间的基表,按照大小进行排序
step3
查看表的DDL或者表结构发现WRH$表中都有snap_id字段,利用这个字段进行数据处理。
对占用空间比较多的表进行数据处理,备份wrh$_active_session_history表保留数据到wrh$_ash_bak表。
step4:数据校验:
SYS@transdb-10.x.x.xxx>select count(*) from wrh$_ash_bak;
COUNT(*)
----------
9723
SYS@transdb-10.x.x.xxx>select count(*) from wrh$_active_session_history WHERE SNAP_ID>=42894 ;
COUNT(*)
----------
9723
step5:清除源表WRH$_ACTIVE_SESSION_HISTORY数据
SYS@transdb-10.x.x.xxx>TRUNCATE TABLE WRH$_ACTIVE_SESSION_HISTORY;
Table truncated.
step6:将备份数据恢复至源表
SYS@transdb-10.x.x.xxx>INSERT INTO WRH$_ACTIVE_SESSION_HISTORY SELECT * FROM WRH$_ASH_TEMP;
9723 rows created.
SYS@transdb-10.x.x.xxx>COMMIT;
Commit complete.
step7.验证基表数据
SYS@transdb-10.x.x.xxx>SELECT COUNT(*) FROM WRH$_ACTIVE_SESSION_HISTORY;
COUNT(*)
----------
9723
step8.删除备份临时表
SYS@transdb-10.x.x.xxx>drop table WRH$_ASH_TEMP purge;
Table dropped.
SYS@transdb-10.x.x.xxx>COMMIT;
Commit complete.
--the end
阅读(7196) | 评论(0) | 转发(0) |