STATSPACK資料清除(三)

yangtingkun發表於2011-12-10

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章