<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-314  評論-209  文章-0  trackbacks-0

    大家在平時開發中,有時意外的刪除過表,可能就是直接重新創建該表。在oracle10g中,可以用Flashback drop恢復用一個被刪除(drop)了的對象,oracle自動將該對象放入回收站。Flashback drop恢復的原理也是利用oracle的回收站來恢復被刪除(drop)的對象。

    回收站,是一個虛擬的容器,用于存放所有被刪除的對象。其實,對于一個對象的刪除,數據庫僅僅是簡單的重命名操作。

    數據庫參數recyclebin設置為on.(即默認設置)。參數recyclebin為on,則表示把Drop的對象放入回收站。為off,則表示直接刪除對象而不放入回收站。

    查看recyclebin值命令如:

    SQL> show parameter bin;

    NAME                         TYPE       VALUE

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

    recyclebin                        string     on

    在系統或會話級別中修改參數recyclebin值的命令為:

    SQL>alter system set recyclebin = on|off;

    SQL>alter session set recyclebin = on|off;

    查看回收站的相關信息視圖有:recyclebin/user_recyclebin/dba_recyclebin.

    手動清除回收站的信息為:purge recyclebin(或purge table original_name);

    刪除一張表而不想放入回收站的命令為:drop table table_name purge;

    示例1:

    1.查看用戶下回收站的信息,此時回收站為空

    SQL>selectOBJECT_NAME,ORIGINAL_NAME,TYPEfromuser_recyclebin;
    OBJECT_NAME                   ORIGINAL_NAME TYPE           
    ------------------------------ ------------- ------
    2.
    創建測試表tab_test,并為該表增加ind_test索引
    SQL>createtabletab_testasselect*fromall_objects;
    Tablecreated
    SQL>createindexind_testontab_test(object_id);
    Indexcreated

    SQL> select count(*) from tab_test;

     COUNT(*)

    ----------

        40699
    3
    。用drop命令刪除tab_test表
    SQL>droptabletab_test;

    Tabledropped
    4。查看用戶回收站信息,此時會記錄刪除后的對象在回收站中的相關信息,此時還能正常操作回收站中的對象,但不能操作DDL/DML語句
    SQL>selectOBJECT_NAME,ORIGINAL_NAME,TYPEfromuser_recyclebin;

    OBJECT_NAME                   ORIGINAL_NAME TYPE           
    ------------------------------ ------------- ------
    BIN$a+iPOcq+QXiwUT8B3c3QoA==$0 IND_TEST      INDEX                    
    BIN$zFJjV8zFSlqbLecXbDeANQ==$0 TAB_TEST      TABLE                   

    SQL>selectcount(*)from"BIN$zFJjV8zFSlqbLecXbDeANQ==$0";

     COUNT(*)
    ----------
        
    40699

    SQL>deletefrom"BIN$zFJjV8zFSlqbLecXbDeANQ==$0";

    deletefrom"BIN$zFJjV8zFSlqbLecXbDeANQ==$0"
    ORA-
    38301:無法對回收站中的對象執行DDL/DML

    5.用flashback恢復表到刪除之前的狀態
    SQL>flashbacktabletab_testtobeforedrop;
    Done

    SQL> select count(*) from tab_test;

     COUNT(*)

    ----------

        40699

    6.恢復表的索引(此時表中的索引同時也被恢復了,只不過該索引還是保留回收站中的索引名稱)

    SQL> select index_name from user_indexes where table_name = 'TAB_TEST';

    INDEX_NAME

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

    BIN$a+iPOcq+QXiwUT8B3c3QoA==$0

    SQL> alter index "BIN$a+iPOcq+QXiwUT8B3c3QoA==$0" rename to ind_test;

    Index altered

    SQL> select index_name from user_indexes where table_name = 'TAB_TEST';

    INDEX_NAME

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

    IND_TEST

    示例2:

    1.查看用戶下回收站的信息,此時回收站為空

    SQL>selectOBJECT_NAME,ORIGINAL_NAME,TYPEfromuser_recyclebin;
    OBJECT_NAME                   ORIGINAL_NAME TYPE           
    ------------------------------ ------------- ------
    2.
    創建測試表test1,并輸入數據
    SQL> create table test1(id number);

    Table created

    SQL> insert into test1 values(1);

    1 row inserted

    SQL> insert into test1 values(2);

    1 row inserted

    SQL> insert into test1 values(3);

    1 row inserted

    SQL> insert into test1 values(4);

    1 row inserted

    SQL> commit;

    Commit complete

    SQL> select count(*) from test1;

     COUNT(*)

    ----------

            4

    3.刪除test1表,然后在重新創建test1表

    SQL> drop table test1;

    Table dropped

    SQL> create table test1(id number);

    Table created

    SQL> insert into test1 values(1);

    1 row inserted

    SQL> commit;

    Commit complete

    SQL> select count(*) from test1;

     COUNT(*)

    ----------

            1

    4.再次刪除test1表

    SQL> drop table test1;

    Table dropped

    5.查詢回收站信息(此時回收站中有兩條test1表的數據)

    SQL>select*fromuser_recyclebin;

    OBJECT_NAME                   ORIGINAL_NAME  TYPE                     
    ------------------------------ --------------------
    BIN$Uk69X077TQWqQ0OQ3u1FdQ==$0 TEST1         TABLE                   
    BIN$kpG5ZWdlRUi/jO6X0EYP+A==$0 TEST1         TABLE 

    5.用flashback恢復表到刪除之前的狀態

    SQL> flashback table test1 to before drop;

    Done

    SQL> select count(*) from test1;

     COUNT(*)

    ----------

            1

    此時查看恢復后的test1,發現恢復到最近一次的信息,因此可說明多次刪除后,在回收站中會存在多條與test1有關的數據,而用flashback table test1 to before drop命令恢復到的是test1表中最近一次刪除的信息


    posted on 2010-08-04 20:40 xzc 閱讀(787) 評論(0)  編輯  收藏 所屬分類: Oracle
    主站蜘蛛池模板: 久久久久亚洲精品美女| 免费爱爱的视频太爽了| 男男gvh肉在线观看免费| 亚洲综合无码精品一区二区三区| 日韩免费一区二区三区在线| 免费很黄无遮挡的视频毛片| 亚洲人成7777| 亚洲视频一区在线| 77777_亚洲午夜久久多人| 亚洲AV无码成人专区片在线观看 | 青草草在线视频永久免费| 久久久精品2019免费观看| 九九热久久免费视频| 高h视频在线免费观看| 老妇激情毛片免费| kk4kk免费视频毛片| 中文在线观看国语高清免费| 久久久久国色AV免费观看| 一级做a爰片久久毛片免费陪| 久久精品免费大片国产大片| 大妹子影视剧在线观看全集免费| 久久国产福利免费| 成全高清在线观看免费| 91热成人精品国产免费| 噜噜嘿在线视频免费观看| 国产又黄又爽又刺激的免费网址 | 一个人看的免费观看日本视频www| 国产成人无码精品久久久免费| 巨胸喷奶水视频www免费视频| 毛片无码免费无码播放 | 亚洲冬月枫中文字幕在线看| 亚洲精品无码专区在线| a高清免费毛片久久| 亚洲人成免费电影| 免费一级毛片在级播放| 亚洲精品国产专区91在线| 日本一区二区三区在线视频观看免费| a级毛片在线视频免费观看| 最近免费中文在线视频| 亚洲精品尤物yw在线影院 | 成年性羞羞视频免费观看无限|