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

相關文章
相關標籤/搜索