了解IT技术
老九你最好的选择

Oracle sysaux表空间使用过大处理-3

Oracle sysaux表空间使用过大处理第三篇,前两篇请见Oracle sysaux表空间使用过大处理-1( https://www.l9ll.cn/database/501.html )和Oracle sysaux表空间使用过大处理-2( https://www.l9ll.cn/database/503.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

赞(2) 打赏
未经允许不得转载:老九IT技术网 » Oracle sysaux表空间使用过大处理-3
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

老九为IT技术人提供最全面的IT资讯和交流互动

友情链接广告合作