我有一個公司的數據表,它是250Gb,有35列。我需要刪除大約215GB的數據,其中 顯然是大量的行從表中刪除。這張表有沒有主鍵。刪除Oracle表的大量行
什麼可能是最快的方法從這個表中刪除數據? Oracle中是否有這種大型刪除過程的工具?
請建議我使用Oracle來做到這一點的最快方法。
我有一個公司的數據表,它是250Gb,有35列。我需要刪除大約215GB的數據,其中 顯然是大量的行從表中刪除。這張表有沒有主鍵。刪除Oracle表的大量行
什麼可能是最快的方法從這個表中刪除數據? Oracle中是否有這種大型刪除過程的工具?
請建議我使用Oracle來做到這一點的最快方法。
正如上面的答案中所述,最好將行保留到一個單獨的表中並截斷表,因爲有一個名爲HIGH WATERMARK
的事物。更多細節可以在這裏找到http://sysdba.wordpress.com/2006/04/28/how-to-adjust-the-high-watermark-in-oracle-10g-alter-table-shrink/。刪除操作將壓倒你調用的UNDO TABLESPACE
。
該recovery model
條款是相當適用於mssql我相信:)。
希望能澄清一下這個問題。
感謝。
你知道哪些記錄需要保留嗎?你將如何識別每個記錄?
解決方案可能是將記錄保留到臨時數據庫,然後截斷大表。之後,將保留的記錄移回。
請注意事務日誌文件可能因此而變得非常大(但取決於您的恢復模式)。
很久以前我們有類似的問題。有一張有10億行的表格,但必須根據某些規則去除很大一部分數據。我們通過編寫一個Pro * C作業來提取我們想要保留的數據並應用這些規則,並將要保存的數據sprintf保存到一個csv文件中來解決這個問題。
然後創建一個SQLLDR控制文件中使用直接路徑(這不會創建撤銷/重做(上傳的數據,但如果你需要恢復的表,你有CSV文件,直到你做你的下一個備份反正)。
順序爲
並行性的量取決於數據庫服務器的CPU和內存 - 我們有16CPUs和幾個RAM的演出,所以沒有問題。
正確數據的提取是其中最長的部分。 經過幾次試運行後,SQL Loader能夠在一小時內加載全部10億行(即1億美元或10億行)。