首先你應該明白閃回刪除操作的對象僅僅是表,它允許你將之前刪除的表恢複到刪除它之前的狀態,同時還會恢複所有索引以及任何許可權和觸發器,唯一的主鍵和非空約束也會被恢複(注意不包括外鍵)。
Oracle 10g開始,drop table 命令的實現方式為:它實際上根本沒有刪除表,而只是重新命名表,並把重新命名的表放進資源回收筒(每個使用者都有一個資源回收筒)可以在user_recyclebin資料字典中查看目前使用者的資源回收筒中的內容,如:被drop的表重新命名後的表名 以及drop之前的名字等等資訊, 我們已經知道rname 一個表並不會改變表的對象號,當使用者發出drop table 命令後,在內部已經把它映射到rename命令,刪除表後表的對象號並沒有改變,並且所佔的儲存空間大小 位置都沒有改變,只是這時候它所佔用的空間是可以被佔用的(個人認為應該是當沒有其他空間可以使用的時候就會佔用它),這時候就會出問題,導致閃回刪除操作不一定100%成功,再就是當你刪除一個表後,你又重建立立一個相同名字的表,這時候你要重新命名要閃回刪除操作的表,如: flashback table table_name to before drop rename new_name ;.
注意:
1.truncate 的表是不能被閃回刪除操作的,
2.drop table name purge ; 這樣刪除的表會刪除多有引用且不能恢複,
3.drop user liu cascade,這樣刪除的使用者liu 的表是不能被閃回的,
4.如果刪除了一個表後,又重建立立了一個一樣名字的表,又把剛建立的表給刪除了,那麼在資源回收筒將會有兩個不一樣資源回收筒名字的表,預設執行閃回刪除操作將會恢複最新的版本,你可以指定資源回收筒中表的名字來指定要恢複的表,如:flashback table "BIN$CXLTgwchMOTgUwpYqcBKAA==$0" to before drop ;
5.如果表上有索引和約束,這樣的話,當你drop table 後 ,相應的約束和索引,也會在資源回收筒重新名,而且當你閃回刪除時,相關的索引和約束會保留在資源回收筒的名字,但是可以重新命名成以前的名字: alter index "索引在資源回收筒的名字" rename to name_inx; alter table table_name rename constraint "約束在資源回收筒的名字" to 以前的名字;
6.flashback drop 不能閃回system 資料表空間中的表