您的位置:首页 > 数据库 > Oracle

Oracle闪回技术之二 Oracle 11g 利用Oracle RecycleBin (回收站)闪回删除功能

2013-01-26 21:05 781 查看
回收站介绍:实现闪回删除功能,需要使用oracle回收站。回收站是所有被删除对象及其相依对象的逻辑存储容器,例如当一个表被drop时,该表及其相依对象并不会马上被数据库彻底删除,而是被保存到回收站中。

回收站将用户执行的drop操作记录在一个系统表中,也就是将被删除的对象写到一个数据字典中。如果确定不再需要该对戏那个,可以使用purge命令对回收站进行清空。被删除的对象的名称可能相同。为了确保添加到回收站中的对象的名称都是唯一的,系统会对这些保存到回收站中的对象进行重命名,命名格式如下:

BIN$globalUID$version

其中,BIN表示RecycleBIN,globalUID是一个全局唯一的、24个字符长的标识对象,该标识与原对象名没有任何关系,$version表示数据库分配的版本号。

接下来演示一个示例:

首先创建一个表tb_temptest,并插入两条数据:

SQL> create table tb_temptest(id number)

2 /

表已创建。

SQL> insert into tb_temptest select 1 from dual union select 2 from dual

已创建2行。

SQL> commit;

提交完成。

查看刚插入的数据:

SQL> select * from tb_temptest;

ID

----------

1

2

SQL>

执行drop删除表:

SQL> drop table tb_temptest;

表已删除。

查看回收站是否保存了刚才删除的表

SQL> show recyclebin;

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME

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

TB_TEMPTEST BIN$/xHQTJWwTr20WgwHd65BUQ==$0 TABLE 2013-01-26:20:50:32

从上面可以看出刚才删除的表被存储在回收站中了(注意sys用户和system用户除外,只有普通用户操作才能被保存到回收站中)

执行闪回删除,相应的数据也恢复回来了:

SQL> flashback table tb_temptest to before drop;

闪回完成。

SQL> show recyclebin;

SQL> select * from tb_temptest;

ID

----------

1

2

SQL>

如果在执行闪回操作时数据库中已经重建了相同的表名,这时需要对闪回的表进行重命名:

SQL> flashback table tb_temptest to before drop rename to newtablename;

闪回时也可以使用RECYCLEBIN NAME进行恢复,(但要加双引号)

我们再次drop掉表tb_temptest,并用RECYCLEBIN NAME进行闪回:

SQL> drop table tb_temptest;

表已删除。

SQL> show recyclebin;

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME

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

TB_TEMPTEST BIN$EjDM+LpCQ22xKBt22KnjXQ==$0 TABLE 2013-01-26:21:08:12

SQL> flashback table "BIN$EjDM+LpCQ22xKBt22KnjXQ==$0" to before drop;

闪回完成。

SQL> show recyclebin;

SQL> select * from tb_temptest;

ID

----------

1

2

SQL>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: