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

一个守望数据库的老菜鸟

文章分类

全部博文(99)

文章存档

2019年(21)

2018年(17)

2017年(37)

2016年(24)

我的朋友

分类: Oracle

2019-04-10 16:14:09

博客文章除注明转载外,均为原创。转载请注明出处。

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
阅读(7206) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~