Oracle文档推荐的STATSPACK过期数据产生的方法是直接删除STATS$SNAPSHOT表中的记录。
这篇文章说明第一篇文章中没有描述清楚的数据清除问题。
STATSPACK数据清除(一):http://yangtingkun.itpub.net/post/468/466248
STATSPACK数据清除(二):http://yangtingkun.itpub.net/post/468/466514
之所以隔了3年才有这篇文章,完全是野花的缘故。野花前一段在折腾STATSPACK是发现了我的文章,并且对于我之前没有得出结论的数据清除问题做出了解答,之所以删除STATS$SNAPSHOT就会导致其他表的数据自动删除,并非是Oracle的什么内部机制,其实道理很简单,就是Oracle建立的是CASCADE ON DELETE约束条件。
看来自己在开发方面还是外行,一直没有想到这个问题,于是特意找到了一个9i上部署STATSPACK的数据库,验证一下:
SQL> SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, STATUS, DELETE_RULE
2 FROM DBA_CONSTRAINTS
3 WHERE TABLE_NAME = 'STATS$SNAPSHOT'
4 AND WNER = 'PERFSTAT'
5 AND CONSTRAINT_TYPE = 'P';
CONSTRAINT_NAME C STATUS DELETE_RU
------------------------------ - -------- ---------
STATS$SNAPSHOT_PK P ENABLED
SQL> SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, STATUS, DELETE_RULE
2 FROM DBA_CONSTRAINTS
3 WHERE WNER = 'PERFSTAT'
4 AND CONSTRAINT_TYPE = 'R'
5 AND R_CONSTRAINT_NAME = 'STATS$SNAPSHOT_PK';
CONSTRAINT_NAME C STATUS DELETE_RU
------------------------------ - -------- ---------
STATS$BG_EVENT_SUMMARY_FK R ENABLED CASCADE
STATS$BUFFER_POOL_STATS_FK R ENABLED CASCADE
STATS$DB_CACHE_ADVICE_FK R ENABLED CASCADE
STATS$DLM_MISC_FK R ENABLED CASCADE
STATS$ENQUEUE_STAT_FK R ENABLED CASCADE
STATS$FILESTATXS_FK R ENABLED CASCADE
STATS$INSTANCE_RECOVERY_FK R ENABLED CASCADE
STATS$LATCH_CHILDREN_FK R ENABLED CASCADE
STATS$LATCH_FK R ENABLED CASCADE
STATS$LATCH_MISSES_SUMMARY_FK R ENABLED CASCADE
STATS$LATCH_PARENT_FK R ENABLED CASCADE
STATS$LIBRARYCACHE_FK R ENABLED CASCADE
STATS$PARAMETER_FK R ENABLED CASCADE
STATS$PGA_TARGET_ADVICE_FK R ENABLED CASCADE
STATS$RESOURCE_LIMIT_FK R ENABLED CASCADE
STATS$ROLLSTAT_FK R ENABLED CASCADE
STATS$ROWCACHE_SUMMARY_FK R ENABLED CASCADE
STATS$SEG_STAT_FK R ENABLED CASCADE
STATS$SESSION_EVENT_FK R ENABLED CASCADE
STATS$SESSTAT_FK R ENABLED CASCADE
STATS$SGASTAT_FK R ENABLED CASCADE
STATS$SGA_FK R ENABLED CASCADE
STATS$SHARED_POOL_ADVICE_FK R ENABLED CASCADE
STATS$SQL_PGASTAT_FK R ENABLED CASCADE
STATS$SQL_PLAN_USAGE_FK R ENABLED CASCADE
STATS$SQL_STATISTICS_FK R ENABLED CASCADE
STATS$SQL_SUMMARY_FK R ENABLED CASCADE
STATS$SQL_WORKAREA_HIST_FK R ENABLED CASCADE
STATS$SYSSTAT_FK R ENABLED CASCADE
STATS$SYSTEM_EVENT_FK R ENABLED CASCADE
STATS$TEMPSTATXS_FK R ENABLED CASCADE
STATS$WAITSTAT_FK R ENABLED CASCADE
32 rows selected.
显然之所以删除STATS$SNAPSHOT表会导致STATSPACK整体数据被清除,是因为所有的外键都设置了CASCADE ON DELETE。这也是第二篇文章中描述的那些不含SNAP_ID的表没有自动清除的原因。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-713109/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-713109/