Oracle數據庫如何恢復刪除的數據表


  如果你不小心把一個重要的數據庫表刪除了,那么請不要緊張、不要着急,因為Oracle Database 10g 中新增加了閃回表特性,它使得被刪除表的恢復過程如同執行幾條語句一樣簡單。讓我們來看該特性是如何工作的。

  首先,讓我們查看當前模式中的表。

TNAME     TABTYPE  CLUSTERID

------------------------    ------- ----------

RECYCLETEST              TABLE 

現在,我們意外地刪除了該表: 

SQL> drop table recycletest;
Table dropped. 

現在讓我們來查看該表的狀態。 

SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE

表 RECYCLETEST 已不存在,但是請注意出現新表 BIN$04LhcpndanfgMAAAAAANPw==$0。這就是所發生的事情:被刪除的表 RECYCLETEST 並沒有完全消失,而是重命名為一個由系統定義的名稱。它存在於同一個表空間中,具有與原始表相同的結構。如果在該表上定義了索引或觸發器,則它們也被重命名,使用與表相同的命名規則。任何相關源(如過程)都失效;原始表的觸發器和索引被改為放置在重命名的表 BIN$04LhcpndanfgMAAAAAANPw==$0 上,保持被刪除表的完整對象結構。 

表及其相關對象被放置在一個稱為“回收站”的邏輯容器中,它類似於您 PC 機中的回收站。但是,對象並沒有從它們原先所在的表空間中刪除;它們仍然占用那里的空間。回收站只是一個列出被刪除對象目錄的邏輯結構。在 SQL*Plus 提示符處使用以下命令來查看其內容(您需要使用 SQL*Plus 10.1 來進行此操作):

SQL> show recyclebinORIGINAL NAME    RECYCLEBIN NAME
ORIGINAL NAME  RECYCLEBIN NAME                OBJECT  TYPE  DROP TIME
---------------- ------------------------------------------ ------------------
RECYCLETEST    BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE         2004-02-16:21:13:31
結果顯示了表的原始名稱 RECYCLETEST,並顯示了回收站中的新名稱,該名稱與我們看到的刪除后所創建的新表名稱相同。(注意:確切的名稱可能因平台不同而不同。)為恢復該表,您所需要做的就是使用 FLASHBACK TABLE 命令:
SQL> FLASHBACK TABLE RECYCLETEST TO BEFORE DROP;FLASHBACK COMPLETE.SQL> SELECT * FROM TAB;TNAME                          TABTYPE  CLUSTERID------------------------------ ------- ----------RECYCLETEST                    TABLE
!表毫不費力地恢復了。
但是,如果你在刪除表的時候使用了PURGE關鍵字,那么表將會被徹底刪除不能再恢復。請看下例:
SQL> drop table log_dict_kind2 purge;
 
Table dropped
 
SQL> flashback table log_dict_kind2 to before drop;
 
flashback table log_dict_kind2 to before drop
 
ORA-38305: 對象不在回收站中
 
SQL> 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM