使用Truncate:清理並回收空間,(mysql,sqlserver等有自增序列的資料庫將序列歸零),無法恢複,不能復原;
使用drop:刪除表,但不回收空間,可以恢複,不能復原;
使用delete:刪除記錄,不回收空間,可恢複,可復原;
1. 使用drop和delete之後如何恢複?使用flashback語句flashback table test2 to before drop ; 查詢資源回收筒select * from dba_recyclebin;
如果不知道原表名或有多個相同表在不同時間被drop,也可以直接使用資源回收筒中的名稱進行閃回。
例如: FLASHBACK TABLE "BIN$b2q1qVWuQZy+1TAWJ0M+OA==$0" TO BEFORE DROP;
這樣就知道是恢複哪個時間drop掉的表了。Oracle10g以前,Drop table後,那麼該表就會從資料字典裡被刪除。但是Oracle10g中在drop table(非purge)後只是在資料字典中對被刪除的表進行重新命名,並沒有真的把表從資料字典中刪除,而用來維護被刪除前的表的名字和後面重建的表名字之間的關係的資料字典表,我們稱之為“資源回收筒”(recycle bin), 當drop table(沒有加 purge)的時候,索引,觸發器也會一起進入資源回收筒。
資源回收筒中的對象將一直存在,直到使用者決定永久刪除它們,使用PURGE命令對資源回收筒空間進行清除; 或是出現資料表空間的空間不足時它們才會被刪除。
注意: 雖然只是資料字典中的表名(當然可能還有索引名,trigger名)發生變化(一般會變成類似BIN$Phio9oeiQYESLIAUICKSE==$0),但是實體的資料等還是存放在原表的資料表空間中。
資源回收筒中表名的格式: BIN$globalUID$Sversion , globalUID是一個全域唯一的標識對象,長度為24個字元。它是Oracle內部使用的標識。$Sversion是資料庫分配的版本號碼。
2. 使用drop表和delete之後如何回收資料表空間?使用Purge語句 可直接使用以下文法徹底刪除表並回收空間DROP TABLE TABLE_NAME PURGE ; 資源回收筒可以提供誤操作後進行恢複的必要資訊,但是如果不經常對資源回收筒的資訊
進行管理的話,磁碟空間會被長時間佔用,因此要經常清除資源回收筒中無用的東
西。要清除資源回收筒,可以使用PURGE命令。PURGE命令可以刪除資源回收筒中的
表、資料表空間和索引,並釋放表、資料表空間和索引所佔用的空間。PURGE命令文法
格式如下:
PURGE TABLE table_name ;
PURGE INDEX index_name ;
PURGE RECYCLEBIN ;
PURGE DBA_RECYCLEBIN ;
PURGE TABLESPACE tablespace_name USER username ;
(1) TABLE指示清除資源回收筒中的表。
(2) INDEX指示清除資源回收筒中的索引。
(3) TABLESPACE指示清除資源回收筒中的資料表空間。
(4) RECYCLEBIN指的是目前使用者需要清除的資源回收筒。
(5) RECYCLEBIN僅SYSDBA系統許可權才能使用,此參數可使使用者從Oracle系統資源回收筒清除所有對象。