2015-11-07 60 views
0

大家好,有誰能幫我一個如下的問題: 「比方說,你有1億個表的記錄,你想刪除1千6百萬條記錄,你會採用哪種更好的方法?DELETE在ORACLE TABLE中大的方法

+1

討論?很快?最小的中斷?它是否需要在一次交易中完成?桌子上有沒有索引?我們是否允許刪除並重新創建索引?表格可以離線多久?桌子被使用了嗎? –

回答

0

,如果你不能使用分區我記得這個老把戲:

  1. 創建NEW_TABLE作爲選擇

    創建表NEW_TABLE不可恢復的 SELECT * FROM OLD_TABLE 其中

  2. 下降OLD_TABLE

  3. 將new_table重命名爲old_table

  4. 重新創建所有必要的索引

    上OLD_TABLE創建索引old_table_idx1(C1,C2)不可恢復的並行5;

看在什麼樣的制約AskTom網站

+1

...並重新創建觸發器,約束,特權,物化視圖日誌,物化視圖,備份新表和索引(希望在完成之前不會導致數據丟失的失敗),重新編譯相關代碼... –

+0

最佳方案是'分區數據,以便您可以執行DROP分區而不是DELETE「,但是當我們無法使用分區時,我們需要找到解決辦法。 – are

+1

是的,但問題在於,雖然在簡單的情況下,「CTAS/drop/rename」方法在性能方面很方便,但有很多警告意味着它需要非常詳細的計劃,測試和風險緩解(臨時缺少備份)和測試。我會在開發數據庫上做這件事,但如果它是例如一個生產Siebel系統,那麼對於這種方法我真的很謹慎。 –