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

本文详细介绍了Oracle回收站的概念、作用以及如何利用它实现闪回删除功能。通过示例展示了如何创建和删除表,以及如何将被删除的对象恢复到其原始状态。此外,还讲解了在数据库重建相同表名时如何对闪回的表进行重命名,以及如何使用回收站名称进行闪回恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回收站介绍:实现闪回删除功能,需要使用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>

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值