使用Oracle10g提供的flashback drop新特性
2024-08-29 13:37:20
供稿:網友
 
             
  為了加快用戶錯誤操作的恢復,Oracle10g提供了Flashback drop的功能。
  
  而在以前的版本中,除了不完全恢復,通常沒有一個好的解決辦法。
  
                                                                                              Oracle 10g的flashback drop功能,答應你從當前數據庫中恢復一個被drop了的對象,在執行drop操作時,現在Oracle不是真正刪除它,而是將該對象自動將放入回收站。對于一個對象的刪除,其實僅僅就是簡單的重令名操作。
  
  所謂的回收站,是一個虛擬的容器,用于存放所有被刪除的對象。在回收站中,被刪除的對象將占用創建時的同樣的空間,你甚至還可以對已經刪除的表查詢,也可以利用flashback功能來恢復它, 這個就是flashback drop功能。
  
  回收站內的相關信息可以從recyclebin/user_recyclebin/dba_recyclebin等視圖中獲取,或者通過SQL*Plus的show recyclebin 命令查看。
  
  SYS AS SYSDBA on 29-MAR-05 >connect eygle/eygle
  Connected.
  
  EYGLE on 29-MAR-05 >create table t1 as select * from dba_users;
  
  Table created.
  
  EYGLE on 29-MAR-05 >drop table t1;
  
  Table dropped.
  
  EYGLE on 29-MAR-05 >show recyclebin;
  ORIGINAL NAME  RECYCLEBIN NAME        OBJECT TYPE DROP TIME
  ---------------- ------------------------------ ------------ -------------------
  T1        BIN$83T2+h92CJvgNAgAIMR+0Q==$0 TABLE    2005-03-29:21:52:00
  EYGLE on 29-MAR-05 > FLASHBACK TABLE t1 TO BEFORE DROP;
  
  Flashback complete.
  EYGLE on 29-MAR-05 >desc t1
   Name                   Null?  Type
   ----------------------------------------- -------- ----------------------------
   USERNAME                 NOT NULL VARCHAR2(30)
   USER_ID                  NOT NULL NUMBER
   PASSWord                      VARCHAR2(30)
   ACCOUNT_STATUS              NOT NULL VARCHAR2(32)
   LOCK_DATE                     DATE
   EXPIRY_DATE                    DATE
   DEFAULT_TABLESPACE            NOT NULL VARCHAR2(30)
   TEMPORARY_TABLESPACE           NOT NULL VARCHAR2(30)
   CREATED                  NOT NULL DATE
   PROFILE                  NOT NULL VARCHAR2(30)
   INITIAL_RSRC_CONSUMER_GROUP            VARCHAR2(30)
   EXTERNAL_NAME                   VARCHAR2(4000)
  
  EYGLE on 29-MAR-05 >show recyclebin;
  
  假如想要徹底清除這些對象,可以使用Purge命令,如:
  
  EYGLE on 29-MAR-05 >show recyclebin;
  ORIGINAL NAME  RECYCLEBIN NAME        OBJECT TYPE DROP TIME
  ---------------- ------------------------------ ------------ -------------------
  T        BIN$29ycNBfhan/gNAgAIMR+0Q==$0 TABLE    2004-06-02:15:26:35
  EYGLE on 29-MAR-05 >purge table t;
  
  Table purged.
  
  EYGLE on 29-MAR-05 >show recyclebin;
  
  使用 purge recyclebin可以清除回收站中的所有對象。
  
  類似的我們可以通過purge user_recyclebin或者是purge dba_recyclebin來清除不同的回收站對象。
  
  通過PURGE TABLESPACE TSNAME,PURGE TABLESPACE TSNAME USER USERNAME命令來選擇清除回收站。
                         
  
  假如需要徹底刪除一個表,不想放到回收站中,可以在drop語句中增加purge選項,如
  
  drop table tablename purge