業務需求:定期刪除表中三個月之前的數據
說明:由於表采取一個月一個分區的設計,所以刪除三個月之前的數據也就是刪除三個月之前的分區。但需要注意的是刪除分區后全局索引會失效,而本地local索引不會受到影響。
刪除分區的語法:
ALTER TABLE TABLE_NAME TRUNCATE PARTITION (PARTITION_NAME);
假如表名是:T_GOODS_RECORD_DETAIL
需要刪除的分區分別是:PAR_G001,PAR_G002。
則刪除分區的SQL:
ALTER TABLE T_GOODS_RECORD_DETAIL TRUNCATE PARTITION PAR_G001;--可以不帶括號 ALTER TABLE T_GOODS_RECORD_DETAIL TRUNCATE PARTITION (PAR_G002);
一般表的主鍵ID是全局索引,所以在刪除分區后需要維護全局索引,SQL如下:
ALTER INDEX 索引名 REBUILD ONLINE; --假如索引是IDX_GOODS_ID,則sql語句為: ALTER INDEX IDX_GOODS_ID REBUILD ONLINE;
也可以在刪除分區的時候就維護索引,SQL是:
ALTER TABLE T_GOODS_RECORD_DETAIL TRUNCATE PARTITION (PAR_G001) UPDATE GLOBAL INDEX;
但是在程序中rebuild索引的時候一定在所有分區都刪除完之后再操作。因為如果表的數據量太大的話rebuild索引會非常耗時!!