淺析Oracle資料庫閃回刪除表原理

來源:互聯網
上載者:User

首先你應該明白閃回刪除操作的對象僅僅是表,它允許你將之前刪除的表恢複到刪除它之前的狀態,同時還會恢複所有索引以及任何許可權和觸發器,唯一的主鍵和非空約束也會被恢複(注意不包括外鍵)。

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 資料表空間中的表

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.