Oracle AWR 删除历史快照 说明

 


 

一. AWR 概述

以前整理过一篇AWR 的说明的文档:sql

Oracle AWR(Automatic Workload Repository) 说明数据库

http://blog.csdn.net/tianlesoftware/article/details/4682300工具

 

 

   从Oracle 10g 开始,Oracle 推出一个工具:AWR(Automatic Workload Repository),并建议用AWR 代替9i 的Statspack。性能

 

AWR 实质上是一个 Oracle 的内置工具,它采集与性能相关的统计数据,并从那些统计数据中导出性能量度,以跟踪潜在的问题。spa

 

AWR的快照由一个MMON的后台进程及其从进程自动地每小时采集一次。为了节省空间,在Oracle 10g中快照会保留7天,11g的快照保留8天,超过的会自动删除,快照频率和保留时间均可以由用户修改。.net

 

AWR 使用几个表来存储采集的统计数据,全部的表都存储在新的名称为 SYSAUX 的特定表空间中的SYS模式下,而且以 WRM$_* 和 WRH$_* 的格式命名:blog

(1)WRM$_*类表存储元数据信息(如检查的数据库和采集的快照)进程

(2)WRH$_*类保存实际采集的统计数据。文档

H 表明“历史数据 (historical)”而 M 表明“元数据 (metadata)”。get

 

在这些表上构建了几种带前缀 DBA_HIST_ 的视图,这些视图能够用来编写您本身的性能诊断工具。视图的名称直接与表相关;例如,视图 DBA_HIST_SYSMETRIC_SUMMARY 是在WRH$_SYSMETRIC_SUMMARY 表上构建的。

 

 

 

二. AWR 快照的删除

 

2.1 为何要删除AWR 快照?

 

默认状况下,对于数据库自身产生的AWR 报告,会保留7天或8天。

SQL> select dbid, retention fromdba_hist_wr_control;

 

     DBID RETENTION

-------------------------------------------------------------------------------------

 879543530 +00008 00:00:00.0

 

这个是我11g的库,显示为8天,若是是Oracle 10g,则会保留7天。

 

 

AWR 快照也能够从其余的数据库中导入,咱们这里看一下:

SQL> select dbid, retention fromdba_hist_wr_control;

 

     DBID RETENTION

-------------------------------------------------------------------------------

 877621333 +40150 00:00:00.0

 879543530 +00008 00:00:00.0

 

若是是从其余库导入的快照,在10g之后会保存110年(40150/365),这部分数据不会永久删除。

 

--AWR出脚本:

SQL> @?/rdbms/admin/awrextr.sql

 

--AWR导入脚本:

SQL> @?/rdbms/admin/awrload.sql

 

另外一个很重要的缘由,就是有时候自动快照不能自动收集,而手工建立快照又能够成功,对于这种问题的解决方法就是把以前的快照清空掉。

 

2.2 删除AWR 快照数据

 

2.2.1 使用dbms_workload_repository 包来删除

 

2.2.1.1 删除本机的AWR 快照

SQL> select dbid, retention fromdba_hist_wr_control;

 

     DBID RETENTION

---------- --------------------

 879543530 +00008 00:00:00.0

 

SQL> selectmin(snap_id), max(snap_id) from dba_hist_snapshot where dbid = 879543530;

MIN(SNAP_ID)MAX(SNAP_ID)

------------------------

         161          176

 

SQL> execdbms_workload_repository.drop_snapshot_range(161, 176, 879543530)

PL/SQL proceduresuccessfully completed.

 

SQL> select *from dba_hist_snapshot where dbid = 879543530;

no rows selected

 

2.2.1.2 删除其余实例的快照

 

SQL> select dbid, retention fromdba_hist_wr_control;

     DBID RETENTION

---------- ---------------------------------------------------------------------

 877621333 +40150 00:00:00.0

 879543530 +00008 00:00:00.0

 

SQL> select min(snap_id), max(snap_id)from dba_hist_snapshot where dbid = 877621333;

MIN(SNAP_ID) MAX(SNAP_ID)

------------ ------------

        160          192

 

SQL> execdbms_workload_repository.drop_snapshot_range(160, 170, 877621333)

PL/SQL procedure successfully completed.

 

SQL> select min(snap_id), max(snap_id) from dba_hist_snapshot where dbid =877621333;

MIN(SNAP_ID) MAX(SNAP_ID)

------------ ------------

        171          192

SQL>

 

删除成功。

 

 

2.2.2 使用dbms_swrf_internal包来删除

 

 

2.2.2.1 删除其余数据库导入的AWR

 

SQL> select dbid, retention fromdba_hist_wr_control;

 

     DBID RETENTION

-------------------------------------------------------------------------------

 877621333 +40150 00:00:00.0

 879543530 +00008 00:00:00.0

 

SQL> select min(snap_id), max(snap_id)from dba_hist_snapshot where dbid = 877621333;

MIN(SNAP_ID) MAX(SNAP_ID)

------------ ------------

        160          192

 

SQL> exec dbms_swrf_internal.unregister_database(877621333)

PL/SQL procedure successfully completed.

 

SQL> select min(snap_id), max(snap_id)from dba_hist_snapshot where dbid = 877621333;

MIN(SNAP_ID) MAX(SNAP_ID)

------------ ------------

 

SQL> select dbid, retention fromdba_hist_wr_control;

 

     DBID RETENTION

-------------------------------------------------------------------------------

 879543530 +00008 00:00:00.0

 

SQL>

 

dbms_swrf_internal.unregister_database 会把全部的快照直接干掉,与咱们上节中的删除是不一样的效果。

 

 

2.2.2.2 删除本机的AWR

咱们以前把快照清空了,因此没有结果:

SQL> select * from dba_hist_snapshotwhere dbid = 879543530;

no rows selected

 

SQL> executedbms_workload_repository.create_snapshot();

PL/SQL procedure successfully completed.

 

SQL> executedbms_workload_repository.create_snapshot();

PL/SQL procedure successfully completed.

 

SQL> executedbms_workload_repository.create_snapshot();

PL/SQL procedure successfully completed.

 

SQL> executedbms_workload_repository.create_snapshot();

PL/SQL procedure successfully completed.

 

--如今又有快照了:

SQL> select min(snap_id), max(snap_id)from dba_hist_snapshot where dbid = 879543530;

 

MIN(SNAP_ID) MAX(SNAP_ID)

------------ ------------

        177          180

 

--删除快照:

SQL> exec dbms_swrf_internal.unregister_database(879543530)

BEGINdbms_swrf_internal.unregister_database(879543530); END;

 

*

ERROR at line 1:

ORA-13521: Unregister operation on localDatabase id (879543530) not allowed

ORA-06512: at"SYS.DBMS_SWRF_INTERNAL", line 99

ORA-06512: at line 1

 

这里直接提示,dbms_swrf_internal.unregister_database不能对本地的数据库使用。因此若是本地的数据库,就只能使用dbms_workload_repository包了。

 

2.2.3 小结

 

dbms_workload_repository

    能够删除本地和其余数据库的快照,能够选择不一样的快照来进行删除。

 

dbms_swrf_internal

    只能对其余数据库的快照来进行操做,会把整个快照unregister掉。

 

 

 

 

 

 

--------------------------------------------------------------------------------------------

版权全部,文章容许转载,但必须以连接方式注明源地址,不然追究法律责任!

QQ:      251097186

Skype:    tianlesoftware

Email:    tianlesoftware@gmail.com

Blog:     http://blog.csdn.net/tianlesoftware

Weibo:    http://weibo.com/tianlesoftware

Twitter:  http://twitter.com/tianlesoftware

Facebook: http://www.facebook.com/tianlesoftware

Linkedin: http://cn.linkedin.com/in/tianlesoftware

相关文章
相关标签/搜索