2012-08-09 46 views
0

我有一個公司的數據表,它是250Gb,有35列。我需要刪除大約215GB的數據,其中 顯然是大量的行從表中刪除。這張表有沒有主鍵。刪除Oracle表的大量行

什麼可能是最快的方法從這個表中刪除數據? Oracle中是否有這種大型刪除過程的工具?

請建議我使用Oracle來做到這一點的最快方法。

回答

1

你知道哪些記錄需要保留嗎?你將如何識別每個記錄?

解決方案可能是將記錄保留到臨時數據庫,然後截斷大表。之後,將保留的記錄移回。

請注意事務日誌文件可能因此而變得非常大(但取決於您的恢復模式)。

0

很久以前我們有類似的問題。有一張有10億行的表格,但必須根據某些規則去除很大一部分數據。我們通過編寫一個Pro * C作業來提取我們想要保留的數據並應用這些規則,並將要保存的數據sprintf保存到一個csv文件中來解決這個問題。

然後創建一個SQLLDR控制文件中使用直接路徑(這不會創建撤銷/重做(上傳的數據,但如果你需要恢復的表,你有CSV文件,直到你做你的下一個備份反正)。

順序爲

  • 運行PRO * C來創建數據的CSV文件
  • 生成DDL索引
  • 下降
  • 運行SQL索引*負載使用CSV文件
  • 重新創建索引使用並行提示
  • 使用度分析表(8)

並行性的量取決於數據庫服務器的CPU和內存 - 我們有16CPUs和幾個RAM的演出,所以沒有問題。

正確數據的提取是其中最長的部分。 經過幾次試運行後,SQL Loader能夠在一小時內加載全部10億行(即1億美元或10億行)。