oracle recyclebin詳解

hd_system發表於2016-11-10

oracle 回收站recyclebin是10g才有的新特性,當我們drop table cube_scope 【purge】時,如果不指定purge時,系統只是將這個表重新命名為BIN$開頭的名稱,並在資料字典中修改了相關資料,表所佔用的物理空間並沒有真正的回收,此時所佔用的空間還是原來的表空間,當表空間不夠用時,ORACLE會跟據DROPSCN#自動進行逐個清理回收站中對像所佔用的空間,10g預設是開啟回收站功能的。

一、如何檢視是否開啟回收站功能?
SQL> select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recyclebin;

SQL> show parameter recyclebin

     NAME                                 TYPE        VALUE
     ------------------------------------ ----------- ------------------------------
     recyclebin                           string      on

     on:表示表空間啟用的回收站功能,建議所有資料都開啟這個功能,百利而無一害!

     備註:該引數可以設定成session級別開啟,也可以設定成system級別,不用重啟就可以生效

二、如何不經過回收站直接刪除並釋放所佔用空間?

SQL> drop table cube_scope purge

     備註:此命令相當於truncate+drop操作,一般不建議這麼操作!

三、如何將回收站recyclebin中的對像還原?

SQL> flashback table cube_scope to before drop

     表名可以是回收站系統的dba_recyclebin.object_name也可以是dba_recyclebin.original_name

     但是此時問題來了,我已經用備份的DDL語句重建了一個新的表,這個時候再用此命令還原顯然會報錯,這個時候怎麼辦呢,只能還原成一個別名,具體操作命令是

SQL> flashback table cube_scope to before drop rename to cube_scope_old

     既然恢復了刪除前的表中資料,現在只能從cube_scope_old中的資料插入cube_scope中

SQL> insert into cube_scope select * from cube_scope_old t

     成功恢復了資料,是不是可以收工了?沒有,還有什麼忘記做了?想想?

     注意:如果將表drop掉,那麼索引也被drop掉了,用這種方法把表找回來了,但是你的索引呢?你的約束呢?表恢復後一定要將表上的索引重建建立起來(切記),索引丟了最多影響效能,約束沒了可能會造成業務資料混亂(一定要注意

四、如何手工清除回收站中的對像?

SQL> purge table orabpel.cube_scope_old --清除具體的對像

    注意:如果此時是DBA使用者操作其它使用者資料,清除回收站中的表時要加上使用者名稱,否則報表不在回收站中

SQL> purge tablespace ORAPEL   --清除指定的表空間對像

SQL> purge tablespace ORAPEL user orabpel --刪除表空間指定使用者下的所有對像

SQL> purge recyclebin  --清空整個回收站

五、show recyclebin為什麼沒有資料呢?

    首先們需要明白一點,recyclebin是user_recyclebin的同義詞,如此你當前的登陸使用者是system此時運用

show recyclebin是沒有資料據的

六、如果同一對像多次刪除怎麼在recyclebin中識別?

    dba_recyclebin中對每刪除一個對像都會以BIN$進行命名,同時會有相應的dropscn、createtime、droptime可以跟據這些對像進行定位,然後進行恢復

七、ORACLE空間利用原則

    1. 使用現有的表空間的未使用空間
    2. 如果沒有了空閒空間,則檢查回收站,對於回收站的物件按照先進先出的原則,對於最先刪除的物件,

       oracle在空間不足之時會最先從回收站刪除以滿足新分配空間的需求
    3. 如果回收站也沒有物件可以清理,則檢查表空間是否自擴充套件,如果自擴充套件則擴充套件表空間,然後分配新空

       間
    4.如果表空間非自擴充套件,或者已經不能自擴充套件(到達最大限制),則直接報表空間不足錯誤,程式終止

八、DROP掉的對像是不是都會經過回收站?

    以下幾種drop不會將相關對像放進回收站recyclebin中

    * drop tablespace :會將recyclebin中所有屬於該tablespace的對像清除

    * drop user :會將recyclebin中所有屬於該使用者的對像清除

    * drop cluster : 會將recyclebin中所有屬於該cluster的成員對像清除

    * drop type : 會將recyclebin中所有依賴該type對像清除

    另外還需要注意一種情況,對像所在的表空間要有足夠的空間,不然就算drop掉經過recyclebin由於空間不足oracle會自動刪除的哦(切記)!

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

相關文章