您的位置:首页 > 运维架构

关于flashback drop 特性

2008-04-25 00:02 316 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: