关于flashback drop 特性

 oracle 10g 提供了很多很好的特性,flashback drop 就是其中的一个。flashback drop 其实就是10g 的“回收站”功能,当你像往常一样drop 一个table 时,不再是一下字table 就不见了,而是,此时 被drop 的table 被放到了 10g 的回收站 recyclebin 中,你可以再从该回收站中flashback 回被drop 的表.

1.例子说明:

SQL> select table_name   from user_tables;
TABLE_NAME
------------------------------TEST
TEST3
SQL> select *  from test3;
BILL_MONTH           DAY_NUMBER MSISDN
-------------------- ---------- --------------------
200803                        1 13800
200803                        2 13800
200803                        3 13800
200803                        2 13801
200803                        3 13801
200803                        1 13803
200803                        5 13804
200803                        6 13804
200803                        7 13804
200803                        8 13804
10 rows selected
SQL> drop  table  test3;
Table dropped
SQL> select *  from test3;
select *  from test3
ORA-00942: 表或视图不存在
SQL> select *  from  user_recyclebin;
OBJECT_NAME                    ORIGINAL_NAME                    OPERATION TYPE                      TS_NAME                        CREATETIME          DROPTIME               DROPSCN PARTITION_NAME                   CAN_UNDROP CAN_PURGE    RELATED BASE_OBJECT PURGE_OBJECT      SPACE
------------------------------ -------------------------------- --------- ------------------------- ------------------------------ ------------------- ------------------- ---------- -------------------------------- ---------- --------- ---------- ----------- ------------ ----------
BIN$VPoTvxPtQZuDABiSoxR8Mg==$0 TEST3                            DROP      TABLE                     USERS                          2008-04-22:00:05:40 2008-04-24:23:19:28     793107                                  YES        YES            52568       52568        52568          8
SQL> select table_name   from user_tables;
TABLE_NAME
------------------------------
TEST
SQL> flashback  table test3  to before drop;
Done
SQL> select table_name   from user_tables;
TABLE_NAME
------------------------------
TEST
TEST3
SQL> select *  from test3;
BILL_MONTH           DAY_NUMBER MSISDN
-------------------- ---------- --------------------
200803                        1 13800
200803                        2 13800
200803                        3 13800
200803                        2 13801
200803                        3 13801
200803                        1 13803
200803                        5 13804
200803                        6 13804
200803                        7 13804
200803                        8 13804
10 rows selected
SQL>


2.功能说明:

a.回收站的特性不过是把要drop 的table rename 个名称,让原对象失踪,造成删除的假象而已。你可以通过10046 抓取 10g 中drop table 的操作,就可以很明显的看出来 rename 的递归操作。

b.回收站中的对象其实也是一般的对象,只是它的信息要在recyclebin ,user_recyclebin ,dba_recyclebin 中去检索,它的生命周期也是一般对象一样的,oracle 不会自己去清理掉所谓ide回收站;
对于清理回收站,你可以 purge recyclebin ,这是清理当前用户下所有的回收站对象;
如果是仅仅清理一个被回收站容纳的table,你可以 purge table "BIN$VPoTvxPtQZuDABiSoxR8Mg==$0" ;
如果在drop 某个table 时你确认不要,你也可以直接在后面指定 purge,这可以将对象彻底删除,不让它进入回收站, drop table test3 purge ;

c.table 对drop 后进入回收站的时候,oracle 给了它一个怪怪的名字,一长串,并且小写字母,$符号等也有的,在后面调用这个对象时,需要给它加上"". (实际上oracle 在 rename 的时候也是加""的。

d.如果相同名称的两个表或多个表被先后drop,那么在recyclebin 中就有多个版本,此时在flashback drop 时,不能 使用原表名,否则只是恢复出最后一个被删除的表,而是要使用recyclebin 中的那个名称。举例如下:
SQL> select *  from test;      
 ID
----------
SQL> insert into  test values ( 1);
1 row inserted
SQL> commit;
Commit complete
SQL> select *  from test;       
ID
----------        
1
SQL> drop  table test;
Table dropped
SQL> select object_name,original_name  from user_recyclebin;
OBJECT_NAME                    ORIGINAL_NAME
--------------------------------------------------------------
BIN$+/XXzBw+SIaez1H8dAHMmA==$0 TEST
SQL> create  table  test ( id number);
Table created
SQL> insert into  test values ( 1);
1 row inserted
SQL> insert into  test values ( 2);
1 row inserted
SQL> commit;
Commit complete
SQL> select *  from  test;       
ID
----------        
1        
2
SQL> drop table test;
Table dropped
SQL> select object_name,original_name  from user_recyclebin;
OBJECT_NAME                    ORIGINAL_NAME
--------------------------------------------------------------
BIN$+/XXzBw+SIaez1H8dAHMmA==$0 TEST
BIN$VorJamfKSzKrA7ZIKHClEQ==$0 TEST
SQL> flashback table test to before  drop;
Done
SQL> select *  from test;       
ID----------        
1        
2
SQL> drop table test;
Table dropped
SQL> select object_name,original_name  from user_recyclebin;
OBJECT_NAME                    ORIGINAL_NAME
--------------------------------------------------------------
BIN$+/XXzBw+SIaez1H8dAHMmA==$0TEST
BIN$8SE+MjPXRL66QZSFOB322Q==$0 TEST
SQL> flashback table "BIN$+/XXzBw+SIaez1H8dAHMmA==$0" to before  drop;
Done
SQL> select *  from test;       
ID
----------        
1
SQL>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值