2011-06-14 25 views
4

我有一個生產Oracle數據庫,其中包含大量數據備份在以前的工作中所做的表中。這些表格彼此獨立並且與數據庫的其餘部分無關。在Oracle中,刪除包含大量數據的表是否安全?

我想刪除這些備份,最好一次性刪除。我知道在更新版本的Oracle刪除表中實際上並沒有被刪除,直到從回收站中清除。我會採取這一點。

是否安全地一次性將它們全部丟棄?在DROP操作期間是否存在性能損失?手術過程中是否有機會耗盡資源?

這樣做最安全的方法是什麼?

+0

做一個下拉和清除(或截斷然後放下) – tbone 2011-06-14 18:19:38

回答

5

將它們一次全部放下可能是安全的。

通常,無論表的大小如何,刪除表都非常快速。 DROP並不會真正改變任何數據,Oracle只是更改數據字典以將空間標記爲可用。我已經放棄了數百GB或更多數據的大量表格,並且從來沒有遇到任何問題。 (您的數據文件可能不再適當調整大小,但這是另一個問題。)

除了依賴和鎖定之外,我唯一一次看到下降時間相對較長的時間是因爲塊清除延遲。基本上,如果您更新,刪除或插入(不添加)大量數據,Oracle可能會向塊中寫入一些事務數據。這是因爲COMMIT是即時的,但這意味着即使從表中讀取的下一個查詢也可能必須清理舊的事務條目。

但是你遇到這個問題的機率很小。如果你有非常大的表格,他們可能是用直接路徑插入創建的,或者其他人已經查詢了表格並清除了這些區塊。即使在最壞的情況下,如果你的系統足夠好寫數據,它可能足以擺脫它(儘管如果事務太舊或者沒有歸檔,你可能會遇到ORA-01555快照太舊來自延遲塊清除的額外重做日誌空間等)。

2

如果這些表沒有依賴關係並且沒有被使用,那麼它的安全性一次性全部刪除它們。如果您擔心新的回收站功能,您可以執行「drop table table_name purge」,它將繞過回收站並獲得清除,而無需從回收站清除它們。