2015-06-02 37 views
0

將大量數據表格歸檔到一年內到另一個表中並從現有表中刪除這些記錄的最佳方式是什麼?將大量數據從一個表歸檔到另一個表oracle

目前,我這樣做:

/*insert into archive table */ 
insert into table_a_archive (select * 
    from table_a 
where last_updated < sysdate - interval '1' year); 

/* delete archived data from existing table */ 
delete from variable_value where last_updated < sysdate - interval '1' month; 

有沒有更好的方法嗎?

+0

你的意思是年齡超過1年而不是1年內的權利?在第二個查詢中也不需要子查詢(只是說last_updated

+0

爲什麼在Delete語句中使用IN子句時,可以將第二個選擇條件包含到外部WHERE子句中,因爲你使用的是同一張桌子。其實這是不好的主意,刪除表 –

+0

已經編輯它的數據。什麼是更好的方法? – user1746050

回答

0

1)創建2個與table_a具有相同結構的新表:table_a_archive和table_a_new。 (不要忘記授予相同的權限,創建索引和等作爲原表-A)

2)重命名錶-A到table_a_old

3)重命名table_a_new到TABLE_A

4)鎖定表table_a_old(以防止遷移期間)

5)使用條件的多表插入從table_a_old移動所有數據分成table_a_archive(LAST_UPDATED < SYSDATE時的任何變化 - 使用追加提示間隔「1」年)和到表-A(else子句)和平行

6)提交

7)下降和淨化table_a_old

這種方法需要應用程序的額外的可用空間和停止(當重命名錶包可以變得無效,在遷移期間新表將是空的)。如果您需要聯機解決方案,則可以使用dbms_redefinition來捕獲遷移期間發生的更改。

我還可以推薦考慮娛樂表作爲由RANGE在last_updated而不是有2個表分區​​。

相關問題