Oracle AWR(Automatic Workload Repository)是Oracle數據庫中的一項性能監測功能,用于收集并保存數據庫實例的性能數據,幫助管理者和開發者分析數據庫的性能問題。然而,隨著數據的積累,AWR會占用大量的數據庫存儲空間,因此需要定期清理過期數據,以免影響數據庫的正常運行。
清理AWR數據的方法有很多種。最常用的是使用Oracle提供的官方腳本PURGE_DB.sh/BAT進行清理。該腳本可以將指定的時間段內的AWR數據刪除。比如,清理一個月前的AWR數據,我們可以使用以下腳本:
$ORACLE_HOME/bin/adrci adrci> set home <path to the ADR home> adrci> purge -age 43200 -type awr adrci> exit
其中,-age參數表示刪除幾秒之前的數據(43200秒即30天),-type參數表示刪除的數據類型,這里是AWR。如果要同時刪除其他類型的數據,可以將-type參數替換為incident、alert log等。
除了腳本外,我們還可以直接使用SQL語句清理AWR數據。以下是一個清理一個月前AWR數據的SQL語句:
SQL> delete from dba_hist_snapshot where begin_interval_time < sysdate-30;
這個SQL語句會刪除所有開始時間早于30天前的AWR快照數據。如果要清理其他類型的AWR數據,可以使用類似的刪除語句,只需要替換表名和表中的列名即可。
需要注意的是,執行AWR數據的刪除操作需要謹慎。如果刪除了重要的歷史性能數據,將會給排查問題帶來困難。因此,我們需要根據實際情況進行清理。通常來說,建議至少保留三個月的AWR數據,以便查看歷史性能情況,調查異常事件。
在執行AWR數據清理操作之前,我們還需要注意以下幾點:
1.停止AWR自動快照功能
如果清理了歷史數據,而AWR還在自動快照,那么它將記錄新的快照數據,導致數據庫的存儲空間越來越大。因此,我們需要在清理數據時停止自動快照功能。
SQL> exec dbms_workload_repository.modify_snapshot_settings(interval => 0);
2.停止AWR自動清理功能
除了自動快照功能外,AWR還有自動清理功能。如果同時進行兩個操作,可能會引起問題。因此,執行AWR清理操作時,最好先停止自動清理功能。
SQL> BEGIN dbms_workload_repository.modify_snapshot_settings(retention_days => 0); END;
3.清理AWR之前備份數據
清理AWR數據前,建議先備份數據。如果不小心清理了錯誤的數據,可以快速恢復到原始情況。
4.監控AWR的占用空間
清理AWR的數據后,需要關注AWR的占用空間是否正常。隨著時間的推移,AWR會再次增長。可以使用以下SQL語句來監控空間使用情況:
SQL> select sum(space_used)/1024/1024/1024 "AWR Size (GB)" from dba_hist_database_instance;
在實際清理AWR數據時,需要根據實際情況進行操作。這篇文章提供了一些適用于大多數情況的方法和技巧,僅供參考。