SYSAUX表空间WRH$_ACTIVE_SESSION_HISTORY占用空间过大的清理办法

SYSAUX表空间WRH$_ACTIVE_SESSION_HISTORY占用空间过大的清理办法

一、查看

@$ORACLE_HOME/rdbms/admin/awrinfo.sql
一般是truncate旧分区。

查看snapshot

sqlplus / as sysdba
set linesize 1000;
set pagesize 200;
col begin_interval_time format a30;
col end_interval_time format a30;
SELECT snap_id, dbid, instance_number, begin_interval_time, end_interval_time
FROM dba_hist_snapshot
ORDER BY snap_id;

二、解决办法一(快)

1、创建新的分区

如果WRH$_表无法自动创建分区,可以用如下SQL创建新的分区,用于保留最新的数据:
alter session set “_swrf_test_action” = 72;

1.1 手工创建一个快照

exec dbms_workload_repository.create_snapshot;

2、truncate旧的分区

生成truncate分区的SQL

sqlplus / as sysdba

set pagesize 0;
set head off;
set echo off;
set linesize 500;
spool truncate_part.sql;
select 'alter table '||object_name||' truncate partition '||subobject_name||' update global indexes;' from dba_objects where object_name like 'WRH$%' and object_type = 'TABLE PARTITION' and created<sysdate-1 ;
spool off;

对输出的SQL文件truncate_part.sql去掉无关的部分

执行
sqlplus / as sysdba @truncate_part.sql

三、解决办法二(慢)

--调用dbms清理
select dbid,min(snap_id) from WRH$_SQL_PLAN group by dbid;
--DBMS 按照快照ID清理
exec DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(dbid,start_id,end_id);
#注意通过dbms包清理数据量大的话会很慢,还会产生大量日志。

你可能感兴趣的:(数据库,oracle)