1、手动创建Snapshots

exec dbms_workload_repository.create_snapshot();
OR
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
END
/

2、手动删除Snapshots

exec dbms_workload_repository.drop_snapshot_range(low_snap_id => 6770,high_snap_id => 6774,dbid => 4059638244);
OR
BEGIN
dbms_workload_repository.drop_snapshot_range(low_snap_id => 6770,
high_snap_id => 6774,
dbid => 4059638244);
END
/

这种方法删除是通过delete的会产生大量redo,建议直接删除相关分区

3、修改快照设置

-----查看快照策略
SQL> col SNAP_INTERVAL format a30
SQL> col RETENTION format a30
SQL> set linesize 150
SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- ------------------------------ ------------------------------ ----------
2956179842 +00000 00:30:00.0 +00016 00:00:00.0 DEFAULT
------生成修改快照策略的语句
set linesize 1000 pagesize 5000
col cmd for a200
SELECT 'exec DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 16*24*60,INTERVAL => 30,dbid => ' || DBID ||
' );' cmd
FROM dba_hist_wr_control;
------其他参数修改
DBMS_WORKLOAD_REPOSITORY.AWR_SET_REPORT_THRESHOLDS(
top_n_events IN NUMBER DEFAULT NULL,
top_n_files IN NUMBER DEFAULT NULL,
top_n_segments IN NUMBER DEFAULT NULL,
top_n_services IN NUMBER DEFAULT NULL,
top_n_sql IN NUMBER DEFAULT NULL,
top_n_sql_max IN NUMBER DEFAULT NULL,
top_sql_pct IN NUMBER DEFAULT NULL,
shmem_threshold IN NUMBER DEFAULT NULL,
versions_threshold IN NUMBER DEFAULT NULL); exec DBMS_WORKLOAD_REPOSITORY.AWR_SET_REPORT_THRESHOLDS(top_n_sql=>30);
------修改快照策略
BEGIN
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 18*24*60,
INTERVAL => 30,
dbid => 1328382724);
END
/

4、AWR生成常用脚本

-----相关脚本说明
•awrrpt.sql :生成指定快照区间的统计报表;
•awrrpti.sql :生成指定数据库实例,并且指定快照区间的统计报表;
•awrsqlrpt.sql :生成指定快照区间,指定SQL语句(实际指定的是该语句的SQLID)的统计报表;
•awrsqrpi.sql :生成指定数据库实例,指定快照区间的指定SQL语句的统计报表;
•awrddrpt.sql :指定两个不同的时间周期,生成这两个周期的统计对比报表;
•awrddrpi.sql :指定数据库实例,并指定两个的不同时间周期,生成这两个周期的统计对比报表; --1.生成单实例 AWR 报告:
@$ORACLE_HOME/rdbms/admin/awrrpt.sql --2.生成 Oracle RAC AWR 报告:
@$ORACLE_HOME/rdbms/admin/awrgrpt.sql --3.生成 RAC 环境中特定数据库实例的 AWR 报告:
@$ORACLE_HOME/rdbms/admin/awrrpti.sql --4.生成 Oracle RAC 环境中多个数据库实例的 AWR 报告的方法:
@$ORACLE_HOME/rdbms/admin/awrgrpti.sql --5.生成 SQL 语句的 AWR 报告:
@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql --6.生成特定数据库实例上某个 SQL 语句的 AWR 报告:
@$ORACLE_HOME/rdbms/admin/awrsqrpi.sql ----生成 AWR 时段对比报告
--7.生成单实例 AWR 时段对比报告
@$ORACLE_HOME/rdbms/admin/awrddrpt.sql --9.生成 Oracle RAC AWR 时段对比报告
@$ORACLE_HOME/rdbms/admin/awrgdrpt.sql --10.生成特定数据库实例的 AWR 时段对比报告
@$ORACLE_HOME/rdbms/admin/awrddrpi.sql --11.生成 Oracle RAC 环境下特定(多个)数据库实例的 AWR 时段对比报告
@$ORACLE_HOME/rdbms/admin/awrgdrpi.sql

5、常见问题

5.1、AWR快照数据和ASH数据未正常产生,一般是由于Oracle mman和mmnl进程异常导致的,可以尝试下列方法解决

1)、重启一下mmon的刷新 
alter system set "_swrf_mmon_flush"=false; 
alter system set "_swrf_mmon_flush"=true;
2)、或者,找到mmon进程杀掉,让数据库自动重启一个新的mmon进程,或者重启下实例。 
ps -ef|grep mmon 
kill -9 xxxxxx

MMON负责执行与AWR相关的任务。包括收集数据库统计信息,收集AWR快照,启动各种自动维护作业JOB,生成超过阀值告警信息。
MMNL负责执行与ASH相关的任务。

5.2、生成awr报告时报错,抛出ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
ERROR:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 919
ORA-06512: at line 1
解决方法:

1、截断sql_text
update WRH$_SQLTEXT set sql_text = SUBSTR(sql_text, 1, 1000);
commit;
2、补丁13527323
Patch 13527323
3、 Use following workaround:
sqlplus / as sysdba
@$ORACLE_HOME/rdbms/admin/prvsawr.plb
@$ORACLE_HOME/rdbms/admin/prvtawr.plb

5.3、SYSAUX表空间中WRH$_ACTIVE_SESSION_HISTORY占用大量空间

SELECT owner,
segment_name,
partition_name,
segment_type,
bytes/1024/1024/1024 Size_GB
FROM dba_segments
WHERE segment_name='WRH$_ACTIVE_SESSION_HISTORY';
--修改参数手动出发AWR表的新分区生成
alter session set "_swrf_test_action" = 72;
--通过下列脚本获取AWR分区对应的快照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;
/
----通过DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE包删除快照信息,但是会产生大量的redo
直接删除相关分区更为便捷和迅速恢复业务
alter table WRH$_ACTIVE_SESSION_HISTORY drop partition WRH$_ACTIVE_692952975_0;

6、快速收集AWR/ASH/ADDM脚本

-------快速收集AWR
declare
begin_time_date date := to_date('20141130 23:00:00', 'yyyymmdd hh24:mi:ss') ;
end_time_date date := to_date('20141203 18:00:00', 'yyyymmdd hh24:mi:ss') ;
begin
dbms_output.put_line('set linesize 2000');
dbms_output.put_line('set pagesize 50000');
dbms_output.put_line('set head off');
for r in (select *
from sys.WRM$_SNAPSHOT t
where t.begin_interval_time >begin_time_date
and t.begin_interval_time< end_time_date
and t.dbid=3628304518
order by t.snap_id, t.instance_number)
loop
dbms_output.put_line('spool awrrpt_' || r.instance_number || '_' ||
to_char(r.begin_interval_time+1/24,'mmdd_hh24mi') || '_' ||to_char(r.end_interval_time+1/24,'mmdd_hh24mi') || '.html');
dbms_output.put_line('select *
from table
(dbms_workload_repository.awr_report_html(' ||
r.dbid || ',' || r.instance_number || ',' ||
r.snap_id || ',' || (r.snap_id + 1) || ',0));');
dbms_output.put_line('spool off');
end loop;
end;
---------快速收集ASH
declare
begin_time_date date := to_date('20141130 23:00:00',
'yyyymmdd hh24:mi:ss');
end_time_date date := to_date('20141203 13:00:00',
'yyyymmdd hh24:mi:ss');
interval_minutes number := 60;
begin
dbms_output.put_line('set linesize 2000');
dbms_output.put_line('set pagesize 50000');
dbms_output.put_line('set head off');
for r in (select db.DBID,
ins.INSTANCE_NUMBER,
begin_time_date + interval_minutes * (lv - 1) / 1440 begin_time_date,
begin_time_date + interval_minutes * lv / 1440,
'yyyymmdd hh24:mi:ss' end_time_date,
to_char(begin_time_date + 60 * (lv - 1) / 1440,
'yyyymmddhh24mi') begin_time,
to_char(begin_time_date + 60 * lv / 1440,
'yyyymmddhh24miss') end_time
from (select /*+ no_merge*/
level lv
from dual
connect by level <= (end_time_date - begin_time_date) * 60 * 24 /
interval_minutes),
gv$instance ins,
v$database db) loop
dbms_output.put_line('spool ashrpt_' || to_char(r.instance_number) || '_' ||
r.begin_time || '-' || r.end_time || '.html'); dbms_output.put_line('select output from table(dbms_workload_repository.ash_report_html( ' ||
r.dbid || ' , ' || r.instance_number || ' , ' ||
'to_date(' || '''' || r.begin_time ||
''', ''yyyymmddhh24miss''' || ')' || ' , ' ||
'to_date(' || '''' || r.end_time ||
''', ''yyyymmddhh24miss''' || ')));'); dbms_output.put_line('spool off ');
end loop;
end;
---------------快速收集ADDM
declare
begin_time_date date := to_date('20141109 15:00:00', 'yyyymmdd hh24:mi:ss') ;
end_time_date date := to_date('20141109 19:00:00', 'yyyymmdd hh24:mi:ss') ; begin
dbms_output.put_line('set linesize 100');
dbms_output.put_line('set pagesize 50000');
dbms_output.put_line('set head off');
dbms_output.put_line('serveroutput ON SIZE UNLIMITED ');
dbms_output.put_line('spool addm.txt');
for r in (select *
from sys.WRM$_SNAPSHOT t
where t.begin_interval_time >=begin_time_date
and t.begin_interval_time<= end_time_date
order by t.snap_id, t.instance_number) loop
dbms_output.put_line('declare
id number ;
name varchar2(100) ;
v_dec varchar2(200) :='||'''addm_'||to_char(r.snap_id)||'_'||to_char(r.snap_id+1)||''';');
dbms_output.put_line( 'begin ') ;
dbms_output.put_line( 'dbms_advisor.create_task(''ADDM'',id,name,v_dec,null);');
dbms_output.put_line( 'dbms_advisor.set_task_parameter(name, '||'''START_SNAPSHOT'','||r.snap_id||');') ;
dbms_output.put_line( 'dbms_advisor.set_task_parameter(name, ' ||'''END_SNAPSHOT'','||to_char(r.snap_id+1)||');') ;
dbms_output.put_line( 'dbms_advisor.set_task_parameter(name, '||'''INSTANCE'','||r.instance_number||');') ;
dbms_output.put_line( 'dbms_advisor.set_task_parameter(name, '||'''DB_ID'','||r.dbid||');') ;
dbms_output.put_line( 'dbms_advisor.execute_task(name); ') ;
dbms_output.put_line('dbms_output.put_line('||'''#spool addm_' || r.instance_number || '_' ||
r.snap_id || '_' || (r.snap_id + 1) || '.txt'');');
dbms_output.put_line('dbms_output.put_line('||'''#select dbms_advisor.get_task_report('''''''||'||name||'''''','
||'''''TEXT'''',''''TYPICAL'''') from dual ;'');');
dbms_output.put_line('dbms_output.put_line(''#spool off'');');
dbms_output.put_line('end ;
/');
end loop;
dbms_output.put_line('spool off');
end
/

参考文档:
AWR Diagnostic Collection Script (Doc ID 733655.1)
Getting ORA-06502 and ORA-06512 Errors When Running AWR Report in HTML Format (Doc ID 2231743.1)
How To Avoid the AWR Usage Without Having Diagnostic Pack License (Doc ID 2276199.1)
WRH$_ACTIVE_SESSION_HISTORY Does Not Get Purged Based Upon the Retention Policy (Doc ID 387914.1)

Oracle AWR快照管理与常见问题的更多相关文章

  1. AWR快照管理

    创建快照: SQL> exec dbms_workload_repository.create_snapshot(); 删除快照: SQL> exec dbms_workload_repo ...

  2. Oracle 手工创建awr快照,获取报告

    Oracle 的自动化工具都是通过后台的进程调用相关的函数实现,而Oracle也允许用户通过包来手工调用这些函数,显然这样增加了工具的安全性,也提高了可操作性,使得DBA可以更灵活的使用这些函数来满足 ...

  3. Oracle AWR报告指标全解析-11011552

    1-5 Top 5 Timed EventsWaits : 该等待事件发生的次数, 对于DB CPU此项不可用Times : 该等待事件消耗的总计时间,单位为秒, 对于DB CPU 而言是前台进程所消 ...

  4. Oracle AWR与警报系统一

    管理自动工作负荷知识库 Oracle收集大量有关性能和活动的统计信息.这些信息在内存中积累,并定期写入数据库:写入到构成自动工作负荷知识库(Automatic Workload Repository, ...

  5. oracle AWR详解

    原文地址:https://blog.csdn.net/elvis_lfc/article/details/52326148 啥是AWR? =============================== ...

  6. 【转】ORACLE AWR报告

    转自:http://blog.csdn.net/liqfyiyi/article/details/8236864 About Oracle AWR Oracle AWR is a powerful m ...

  7. Oracle Awr报告_生成

    AWR的概念 Oracle数据库是一个使用量很多的数据库,关于Oracle数据库的性能.Oracle10g以后,Oracle提供了一个性能检测的工具:AWR(Automatic Workload Re ...

  8. ORACLE AWR报告数据的导入导出实践

    关于AWR的快照数据可以导出.导入,一直没有亲手实践过.今天动手测试了一下如何导出.导入AWR数据,将AWR的数据从一测试服务器,导入到另外一台测试服务器. SQL> @?/rdbms/admi ...

  9. Oracle AWR 数据导入/导出的步骤

    LINUX状态下,连接oracle用户:su - oracle  1.上传采集快照.dmp文件至服务器  (dbid:4292035712)  919219826 2.在服务器端创建目录 (即文件夹a ...

随机推荐

  1. RTT之内存管理及异常中断

    内存管理分静态内存管理和动态内存管理(根据大小又分2种) 静态内存管理:创建.删除.初始化.解绑.申请和释放.初始化内存池是属于静态内存管理,与创建内存池不同的是,此处内存池对象所使用的内存空间是由用 ...

  2. git使用笔记-日志

    1.查看函数的历史修改 git log -L :git_deflate_bound:zlib.c2.查看HEAD的所有记录 git reflog $ git reflog 1a410ef HEAD@{ ...

  3. PHP用mysql数据库存储session

    大部分使用php的人一旦应用到session都会使用cookie. cookie虽好可是它也会给我们带来一些隐患的. 隐患一:如果客户端机器的cookie一旦因病毒而失效了,那么session也就相当 ...

  4. jQuery 3 有哪些新东西

    jQuery 的横空出世,至今已有十个年头了,而它的长盛不衰显然不是没有理由的.jQuery 提供了极为友好的接口,使得开发者们可以方便地进行 DOM 操作.发起 Ajax 请求.生成动画……不一而足 ...

  5. 负载均衡配置下的不同服务器【Linux】文件同步问题

    负载均衡配置下的不同服务器[Linux]文件同步问题2017年04月13日 22:04:28 守望dfdfdf 阅读数:2468 标签: linux负载均衡服务器 更多个人分类: 工作 问题编辑版权声 ...

  6. 粗看ES6之解构赋值

    标签: javascript es6 什么是解构赋值? 示例如下: <!DOCTYPE html> <html> <head> <meta charset=& ...

  7. 关于css实现单行、多行省略标记

    实现单行: overflow: hidden; text-overflow:ellipsis; white-space: nowrap; 实现多行: display: -webkit-box; -we ...

  8. jquery 滑块导航菜单

    带滑块的导航菜单,鼠标悬浮时,滑块会移动至鼠标位置,离开时,滑块会回到原来的位置,点击菜单之后滑块会停留在被点击菜单位置,等待下一次的鼠标悬浮事件或者点击事件,效果图: 图片效果不行,直接上代码: & ...

  9. 【从业余项目中学习1】C# 实现XML存储用户名密码(MD5加密)

    最近在写一个C#的项目,用户需求是实现Winform的多文档界面与Matlab算法程序之间的交互.做了一段时间发现,这既能利用业余时间,实战中也可学习一些技术,同时刚毕业也增加一份收入.所以后面会不断 ...

  10. SharePoint 栏的三种名字Filed :StaticName、 InternalName、 DisplayName

    SharePoint 的栏,有3个名字, StaticName InternalName  DisplayName. 当在第一次创建栏的时候,这3个名字一起进行创建,并且都一样. <FIELD  ...