oracle 11G AWR不自动清理

理论上AWR数据应当根据保留时间,自动清理,但是实际上,经常碰到这样的:

col segment_name for a32;
set linesize 500;
set pagesize 500;
with t1 as (
select round(sum(bytes)/1024/1024) MB,segment_name from dba_segments where owner=‘SYS‘
group by segment_name
order by 1 desc )
select * from t1 where rownum<16;

然后WRH$开头的几个表占十几个G的情况,也就是AWR数据并没有完全被清理掉,检查策略一切正常:

 SQL> select INSTANCE_NUMBER, min(SAMPLE_TIME), max(SAMPLE_TIME) from
WRH$_ACTIVE_SESSION_HISTORY group by INSTANCE_NUMBER;  2  

INSTANCE_NUMBER MIN(SAMPLE_TIME)                                                            MAX(SAMPLE_TIME)
---------------  -------------------------            --------------------------------------------------
              1 25-MAY-16 08.14.48.613 PM                                                   28-MAR-18 08.56.02.944 AM

SQL>  select snap_interval,retention from dba_hist_wr_control;

SNAP_INTERVAL                                                               RETENTION
------------------------------------ ---------------------------------------------------------------------------
+00000 01:00:00.0                                                           +00008 00:00:00.0

SQL>  select min(snap_id),max(snap_id) from WRH$_EVENT_HISTOGRAM;

MIN(SNAP_ID) MAX(SNAP_ID)
------------ ------------
           1        16015

MOS查一下BUG号14084247,从 11.2.0.3之后几乎都有这个问题,并且打了14084247 之后,貌似也不能解决,MOS又发一篇文章,手动清理,DOCID387914.1,步骤如下:
1检查分区情况

SELECT owner,
  segment_name,
  partition_name,
  segment_type,
  bytes/1024/1024/1024 Size_GB
FROM dba_segments
WHERE segment_name=‘WRH$_ACTIVE_SESSION_HISTORY‘;

2 修改隐含参数:
alter session set "_swrf_test_action" = 72;
3 再次检查分区情况
4 统计各个WRH表的最大,最小snap_id

set serveroutput on
declare
CURSOR cur_part IS
SELECT partition_name from dba_tab_partitions
WHERE table_name = ‘WRH$_ACTIVE_SESSION_HISTORY‘; 

query1 varchar2(200);
query2 varchar2(200); 

TYPE partrec IS RECORD (snapid number, dbid number);
TYPE partlist IS TABLE OF partrec; 

Outlist partlist;
begin
dbms_output.put_line(‘PARTITION NAME SNAP_ID DBID‘);
dbms_output.put_line(‘--------------------------- ------- ----------‘); 

for part in cur_part loop
query1 := ‘select min(snap_id), dbid from sys.WRH$_ACTIVE_SESSION_HISTORY partition (‘||part.partition_name||‘) group by dbid‘;
execute immediate query1 bulk collect into OutList; 

if OutList.count > 0 then
for i in OutList.first..OutList.last loop
dbms_output.put_line(part.partition_name||‘ Min ‘||OutList(i).snapid||‘ ‘||OutList(i).dbid);
end loop;
end if; 

query2 := ‘select max(snap_id), dbid from sys.WRH$_ACTIVE_SESSION_HISTORY partition (‘||part.partition_name||‘) group by dbid‘;
execute immediate query2 bulk collect into OutList; 

if OutList.count > 0 then
for i in OutList.first..OutList.last loop
dbms_output.put_line(part.partition_name||‘ Max ‘||OutList(i).snapid||‘ ‘||OutList(i).dbid);
dbms_output.put_line(‘---‘);
end loop;
end if; 

end loop;
end;
/

5 删除不需要的数据

DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(
low_snap_id IN NUMBER,
high_snap_id IN NUMBER
dbid IN NUMBER DEFAULT NULL);

6 运行 @?/rdbms/admin/awrinfo.sql再次检查下
7 最后建议重启一下MMON刷新:

alter system set "_swrf_mmon_flush"=false;
alter system set "_swrf_mmon_flush"=true; 

原文地址:http://blog.51cto.com/snowhill/2091907

时间: 2024-10-07 07:55:55

oracle 11G AWR不自动清理的相关文章

Oracle 11g AWR性能报告

一.自动工作负载库(Automatic Workload Repository,AWR) 自动工作负载库(Automatic Workload Repository,AWR)是在Oracle公司提供的一个工具.AWR来可以自动收集.处理.并保存性能统计结果,这种统计数据存放在内存中并随后存储在数据库中,这些数据既能在报告中显示也可以通过视图查询.可以协助我们找出Oracle的性能瓶颈. AWR收集和处理的统计数据包括: 对象统计,用于确定数据库段(表.索引…)的访问情况 基于时间的统计:数据库活

Oracle 11g设置内存自动管理

Oracle 11g设置内存自动管理: ALTER SYSTEM SET MEMORY_TARGET = 1024M SCOPE=SPFILE;ALTER SYSTEM SET memory_max_target = 1500M SCOPE=SPFILE;ALTER SYSTEM SET SGA_TARGET = 0 SCOPE=SPFILE;ALTER SYSTEM SET SGA_MAX_SIZE=800M SCOPE=SPFILE;ALTER SYSTEM SET PGA_AGGREGAT

Oracle 11g AWR 系列五:如何生成 AWR 报告?

1.生成单实例 AWR 报告:@$ORACLE_HOME/rdbms/admin/awrrpt.sql2.生成 Oracle RAC AWR 报告:@$ORACLE_HOME/rdbms/admin/awrgrpt.sql3.生成 RAC 环境中特定数据库实例的 AWR 报告:@$ORACLE_HOME/rdbms/admin/awrrpti.sql4.生成 Oracle RAC 环境中多个数据库实例的 AWR 报告的方法:@$ORACLE_HOME/rdbms/admin/awrgrpti.s

centos 6 oracle 11G DB install

因业务迁移,需重新部署oracle DB,此文仅作部署记录,部署文档主要参考官方文档http://docs.oracle.com/cd/E11882_01/install.112/e47689/toc.htm 概要: 主机:OpenStack 云主机 系统:Completing a Minimal Linux centos 6.8 x86_64 DB:Oracle Database 11g Release 2(11.2) 内存:2Gb 硬盘:/dev/vda 20Gb /dev/vdb 30Gb

ORACLE 11G 如何修改 awr 的保留期限小于8天

 ORACLE 11G 如何修改 awr 的保留期限小于8天 Oracle Database 11g 默认具备一个系统定义的Moving Window Baseline,该基线对应于 AWR 保留期中的所有 AWR 数据. 仅可存在一个Moving Window Baseline. 系统定义的Moving Window Baseline认大小为当前的AWR保留期,即默认为八天. 如果要增大Moving Window Baseline,首先需要相应增大AWR保留期. AWR保留期和系统定义的M

利用脚本自动清理Oracle归档日志

背景 由于Oracle数据库开启了归档模式,经常因为归档日志文件占用空间过大而导致数据库无法正常连接,发现问题后需要手动清理归档日志,而发现问题时可能已经过去很长时间了,在生产环境中对用户的使用有非常严重的影响. 项目中涉及到多方数据对接,对数据库的频繁插入和更新会生成大量的归档日志,归档日志空间是500G,大概一周左右的时间归档日志空间就100%. 为解决这个问题这里使用脚本+定时任务自动清理归档日志,只保留5天归档. 归档日志清理脚本 #!/bin/bash #Author wangchen

Oracle 11g 新特性:自动创建分区(Interval Partition)

分区(Partition)一直是Oracle数据库引以为傲的一项技术,正是分区的存在让Oracle高效的处理海量数据成为可能,在Oracle 11g中,分区技术在易用性和可扩展性上再次得到了增强.在10g的Oracle版本中,要对分区表做调整,尤其是对RANGE分区添加新的分区都需要DBA手动定期添加,或都使用存储过程进行管理.在11G的版本中的Interval Partition不再需要DBA去干预新分区的添加,Oracle会自动去执行这样的操作,减少了DBA的工作量.Interval Par

使用Oracle 11g分区自动扩展的功能的一个小问题

Oracle 11g下使用分区自动扩展的功能,非常方便,不过同时也带来一个问题,就是导出.导入之后,建表语句改了,下面来做个实验: SQL> select * from v$version; BANNER ------------------------------------------------------------------------------ Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Pr

Oracle 11g下自动创建分区

11g之前,维护分区需要手工.11g之后使用interval来实现自动扩展分区,简化了维护. 根据年  INTERVAL(NUMTOYMINTERVAL(1,'YEAR')) 根据月  INTERVAL(NUMTOYMINTERVAL(1,'MONTH')) 根据天  INTERVAL(NUMTODSINTERVAL(1,'DAY')) 下面用按月自动扩展来做个试验: SQL> create table t_range (id number not null PRIMARY KEY, test_