Oracle tips:drop table和purge,droppurge
在操作Oracle時,我們經常都會刪除一個表,當刪除錯誤後,我們希望能夠恢複該表,有時也希望刪除表之後能夠立刻釋放表的空間。下面將介紹在Oracle中表的刪除、恢複和空間釋放。
DROP TABLE
當你drop一個表時,資料庫不會立刻釋放表的空間,而是重新命名這個表然後將其清除中,可以通過下面的方式查看一個刪除的表:
select object_name,original_name from user_recyclebin where original_name = 'TEMP';OBJECT_NAMEORIGINAL_NAME-------------------------------------------------------BIN$C1LT5U0DaV7gVAAhKENZ5A==$0TEMP
object_name:對象在資源回收筒中的名稱;
original_name:對象的原始名稱。
表清除後,Oracle不會該表的空間給其它對象使用,表所佔用的空間依然佔用,除非使用者手工進行Purge或者因為儲存空間不夠而被資料庫清掉。如果你發現錯誤的刪除了表,可以通過FLASHBACK TABLE將表恢複。
FLASHBACK TABLE
下面是使用FLASHBACK TABLE來恢複一個叫temp的表:
FLASHBACK TABLE temp TO BEFORE DROP;
TO BEFORE DROP表示恢複這個表及其所有依賴的對象。如果該表的名稱已經被其它表使用,那麼執行FLASHBACK TABLE該表時則會報錯:
ORA-38312:original name is used by an existing object
這時,你可以在執行FLASHBACK TABLE時將表重新命名:
FLASHBACK TABLE temp TO BEFORE DROP RENAME TO temp_old;
RENAME TO表示將該表恢複後重新命名。如果該表已經被刪除了多次,那麼使用FLASHBACK TABLE恢複該表將預設恢複最後一次刪除的那個,如果你想恢複之前的一個版本,你需要在資源回收筒中查詢該表:
select object_name,original_name,droptime from user_recyclebin where original_name = 'TEMP';OBJECT_NAMEORIGINAL_NAMEDROPTIME------------------------------------------------------------------------BIN$C1LT5U0FaV7gVAAhKENZ5A==$0TEMP2014-12-29:10:59:41BIN$C1LT5U0HaV7gVAAhKENZ5A==$0TEMP2014-12-29:10:59:54BIN$C1LT5U0GaV7gVAAhKENZ5A==$0TEMP2014-12-29:10:59:47
然後可以使用那個恢複並重新命名的方式依次恢複每一個。
使用FLASHBACK TABLE需要注意:
1)資料庫將從資源回收筒恢複該表的所有索引,注意bitmap join Index不能恢複,因為該索引在表格刪除後不會被清除中,所以不能恢複;
2)資料庫將恢複該表的trigger和constraint,除了指向其它表的完整性條件約束;
3)當刪除一個表格時,定義在該表格上的所有物化視圖日誌也被刪除,但不會清除中,因此,物化視圖日誌不能隨著表格被恢複;
4)當刪除一個表格時,該表格相關的所有索引都將被清除中,如果資料庫空間不足,資料庫將首先清除掉索引的空間,因此,在這種情況下,恢複表格將無法恢複所有的索引;
5)如果被刪除的表格已經被purge了,那麼將無法恢複。
如果使用者在刪除一個表後不會再恢複它,可以考慮使用purge將其測試清除掉。
PURGE
PURGE可以將表徹底清除,並且可以釋放表所佔用的空間。下面是PURGE一個已經在資源回收筒中的表temp:
purge table temp;
需要注意你不能復原一個purge操作,一旦對一個表執行了purge操作,該表將無法再恢複。
如果該表被刪除了多次,purge操作將清除最早刪除的那個表,你也可以清除整個資源回收筒的內容:
PURGE RECYCLEBIN;
DROP TABLE ... PURGE
我們也可以將刪除表格和釋放空間在一步中完成,下面就是將temp表測試刪除:
drop table temp purge;
這種方式相當於你先刪除表格temp,然後在對錶格執行purge操作。注意,你不能復原一個帶上PURGE的DROP TABLE操作,也不能恢複一個使用PURGE刪除的表格。