以前整理过一篇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 报告,会保留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
另外一个很重要的缘由,就是有时候自动快照不能自动收集,而手工建立快照又能够成功,对于这种问题的解决方法就是把以前的快照清空掉。
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
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>
删除成功。
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 会把全部的快照直接干掉,与咱们上节中的删除是不一样的效果。
咱们以前把快照清空了,因此没有结果:
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包了。
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