AWR(六)-如何删除AWR数据
Dec062011
之前写了些关于迁移AWR数据的文章(详见以下列表),在我的数据库中,经常会导入很多客户数据库的AWR数据,所以过一段时间就要对这些历史数据进行清理。
清理AWR数据利用dbms_swrf_internal包就可以很容易实现。比如清理前我的数据库里存在以下的数据库AWR信息。
Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ------------ -------- ------------ ------------ ------------ * 1520519778 1 STREAM stream STREAM 2854872633 2 TGJZL tgjzl2 tgsjzl2 1645778343 2 B1ACDB B1ACDB2 acdbs 2400249746 1 CNDERPDB cnderpdb1 p5a1 2400249746 2 CNDERPDB cnderpdb2 p5b1 2854872633 1 TGJZL tgjzl1 tgsjzl1 1645778343 1 B1ACDB B1ACDB1 acdbm 1247539900 1 B1EDB B1EDB EDB
可以看出,DB_ID为2854872633的数据库也就是DB_NAME为TGJZL的数据库和DB_ID为2400249746也就是DB_NAME为CNDERPDB的数据库还有DB_ID为1645778343 的数据库是RAC环境,DB_NAME为B1EDB的数据库是单实例环境,对于RAC环境,我们只需要清理一次就可以,ORACLE会自动将实例1和实例2的AWR信息都清理掉。下面演示下如何利用dbms_swrf_internal包来清理AWR数据。
SQL> exec dbms_swrf_internal.unregister_database(2854872633); PL/SQL 过程已成功完成。 SQL> exec dbms_swrf_internal.unregister_database(1645778343); PL/SQL 过程已成功完成。 SQL> exec dbms_swrf_internal.unregister_database(2400249746); PL/SQL 过程已成功完成。 SQL> exec dbms_swrf_internal.unregister_database(1247539900); PL/SQL 过程已成功完成。
此时,我的数据库中只剩本地数据库的AWR信息。
DB Id Inst Num DB Name Instance Host ------------ -------- ------------ ------------ ------------ * 1520519778 1 STREAM stream STREAM
如果要清理本地数据库的AWR信息,dbms_swrf_internal包就无能为力了。
SQL> exec dbms_swrf_internal.unregister_database(1520519778); BEGIN dbms_swrf_internal.unregister_database(1520519778); END; * 第 1 行出现错误: ORA-13521: 不允许对本地数据库 ID (1520519778) 执行注销操作 ORA-06512: 在 "SYS.DBMS_SWRF_INTERNAL", line 99 ORA-06512: 在 line 1
此时可以使用DBMS_WORKLOAD_REPOSITORY包来清理本地的快照信息,详见AWR(一)-基本配置 http://www.dbdream.com.cn/2011/12/01/awr%E4%B8%80-%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE/