Oracle 閃回刪除表原理分析

賀子_DBA時代發表於2014-12-10
首先你應該明白閃回刪除操作的物件僅僅是表,它允許你將之前刪除的表恢復到刪除它之前的狀態,同時還會恢復所有索引以及任何許可權和觸發器,唯一的主鍵和非空約束也會被恢復(注意不包括外來鍵)。
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 表空間中的表:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-1363597/,如需轉載,請註明出處,否則將追究法律責任。

相關文章