10g 新特性 Recyclebin 空間的自動清理(zt)

tolywang發表於2008-07-14

   測試OS:windows2003
    版  本:

    SQL> select version from v$instance;

    VERSION
    -----------------
    10.2.0.1.0

     Oracle 10g中引入了Recyclebin的概念,刪除的表或其他物件會像Windows中刪除檔案一樣放入回收站(Recyclebin)中。你可以再從該回收站中flashback 回被drop 的表.  可以從recyclebin ,user_recyclebin ,dba_recyclebin 中獲得他們的相關資訊。
   
    一般情況下,我們使用 purge 命令來清理一些不再需要的表。
         SQL> purge recyclebin;  --清理當前使用者下所有的回收站物件
         SQL> purge table "BIN$VPoTvxPtQZuDABiSoxR8Mg==$0" ;  --清理指定的表
    前幾天看到一篇文章上有一段說: "回收站中的物件其實也是一般的物件,只是它的資訊要在recyclebin ,user_recyclebin ,dba_recyclebin 中去檢索,它的生命週期也是一般物件一樣的,oracle 不會自己去清理掉所謂ide回收站;"
    這是不對的。Recyclebin中的表是不安全的!
    放入Recyclebin中的表並不是永久存在的,當表空間被回收站資料完全佔滿,以至於必須擴充套件資料檔案來容納更多資料時,物件以先進先出的方式從回收站中自動清除。在刪除表之前,相關物件(如索引)被刪除。
    同樣,空間壓力可能由特定表空間定義的使用者限額而引起。表空間可能有足夠的空餘空間,但使用者可能將其在該表空間中所分配的部分用完了。在這種情況下,Oracle 自動清除該表空間中屬於該使用者的物件。

    我們來做一個實驗:

  一、建立一個表空間和一個使用者。
      SQL> create tablespace testts datafile 'D:ORACLEPRODUCT10.2.0ORADATAMINGTESTTS.DBF' size 1M;

      表空間已建立。

      SQL> create user test identified by test default tablespace testts temporary tablespace temp;

      使用者已建立。

      SQL> grant connect  to test;

      授權成功。

      SQL> grant resource to test;

      授權成功。

      SQL> grant dba to test;

      授權成功。

  二、在表空間中建立表:

      SQL> create table sysobj as select * from dba_tables;

      表已建立。

      SQL> select bytes from dba_segments where segment_name='SYSOBJ';

          BYTES
       ----------
         458752

      SQL> create table sysobj2 as select * from dba_tables;

      表已建立。

      SQL> create table sysobj3 as select * from dba_tables;
      create table sysobj3 as select * from dba_tables
                                      *
      第 1 行出現錯誤:
      ORA-01652: 無法透過 8 (在表空間 TESTTS 中) 擴充套件 temp 段

  三、因為這裡空間只有1M,這時空間不夠了,我們先刪除一個表。

      SQL> drop table sysobj2;

      表已刪除。

      SQL> select * from recyclebin;

      OBJECT_NAME                    ORIGINAL_NAME                    OPERATION
------------------------------ -------------------------------- ---------
TYPE                      TS_NAME                        CREATETIME
------------------------- ------------------------------ -------------------
DROPTIME               DROPSCN PARTITION_NAME                   CAN CAN
------------------- ---------- -------------------------------- --- ---
   RELATED BASE_OBJECT PURGE_OBJECT      SPACE
---------- ----------- ------------ ----------
BIN$PJ6U2b0JRVWgmdmQ7+5vXg==$0 SYSOBJ2                          DROP
TABLE                     TESTTS                         2008-07-13:23:43:50
2008-07-13:23:44:46     753663                                  YES YES
     52838       52838        52838         56


  四、再來建立表:

    SQL> create table sysobj3 as select * from dba_tables;

    表已建立。

    SQL> select * from tab;

     TNAME                          TABTYPE  CLUSTERID
     ------------------------------ ------- ----------
     SYSOBJ                         TABLE
     SYSOBJ3                        TABLE

五、這時我們可以看到,recyclebin中的表不見了,空間回收了!

    SQL> select * from recyclebin;

    未選定行

六、刪除測試使用者和表空間

    (略)

 

 

http://www.itpub.net/viewthread.php?tid=1021030&extra=page%3D1&frombbs=1  

 


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

相關文章