闪回技术之表级闪回特别篇2

表级别闪回
闪回删除的目的是防止用户错误的删除表,索引等数据库对象,启动闪回后,在删除一个表时,物理上该表没有被删除,但是它占用

的空间回到空闲列表,也就是这段空间在某种条件下是可以被占用的。

闪回删除原理
使用drop table删除表,该表不会直接从数据库立即删除,而是保持原表的位置,但是将删除的表重新命名,并将删除的表信息存储

在回收站中,回收站记录了表的新名字和原名字,显然此时被删除的表空间没有立即被释放,变成数据库可以使用的潜在空间,记录

在回收站的信息会保留一段时间,直到回收站空间不足或者使用purge指令删除回收站中的记录。

回收站是一个逻辑结构,不具物理数据结构,只要删除的表信息记录在回收站中就可以恢复删除的表。

show parameter recyclebin;  --首先查看回收站是否启用,没有启用的话要开启哦

alter system set recyclebin=on scope=both;

我们可以通过user_recyclebin和dba_recyclebin查看回收站的一些信息

启动实验:
select *  from test3; --证明T表存在哈,没得别的意思

drop table test3;  --然后我删

col ts_name for a10
col owner for a10
col original_name for a10
select owner,original_name,object_name,ts_name,droptime from dba_recyclebin;

OWNER      ORIGINAL_N OBJECT_NAME                    TS_NAME    DROPTIME
---------- ---------- ------------------------------ ---------- -------------------
TEST3      TEST3      BIN$cfNgvSK4TI2vgQ0zSatHLw==$0 USERS      2013-10-06:13:27:30
该视图记录着被删除表的用户,所属表空间,删除时间,删除自动生成表的系统名称为:BIN$cfNgvSK4TI2vgQ0zSatHLw==$0

flashback table test3 to before drop ;   --现在从回收站恢复被删除的表
show recyclebin  在查看回收站没有了撒
select *  from test3;

 

实验2:
我们可以通过回收站中系统命名删除的表进行恢复,然后命名这样做的好处就是多个同表名
drop table test3;
show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
TEST3            BIN$S1kgPualRa6eA0H0PYsewA==$0 TABLE        2013-10-06:13:33:28

flashback table "BIN$S1kgPualRa6eA0H0PYsewA==$0" to before drop rename to test4;
SQL> flashback table "BIN$S1kgPualRa6eA0H0PYsewA==$0" to before drop rename to test4;
闪回完成。
记到要加双引号,至于为什么要加,我也没怎么研究,我们就理解为字符串嘛

select table_name from user_tables;
TABLE_NAME
-----------------
TEST4
完成


实验3:
基于有对象的表被删,然后还原
create index index_test4 on test4(ID);  --建立索引
select index_name,table_name from user_indexes where table_name='TEST4';   --验证索引是否有效
INDEX_NAME                     TABLE_NAME
------------------------------ ----------------
INDEX_TEST4                    TEST4

drop table test4;
show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
TEST4            BIN$Ky4TIqoXR9aZC9ynvfMdvg==$0 TABLE        2013-10-06:13:41:51

 

select index_name,table_name from user_indexes where table_name='TEST4';  --再次查看索引无效了撒
flashback table test4 to before drop;

select index_name,table_name from user_indexes where table_name='TEST4'; 

INDEX_NAME                     TABLE_NAME
------------------------------ -----------
BIN$BlnhZPmIT0OjBKYkJXVrbg==$0 TEST4
闪回成功,索引也闪回成功,只不过ORALCE该它命名了个名字,好个烦,现在我们要重新给索引命名
drop index "BIN$BlnhZPmIT0OjBKYkJXVrbg==$0";
create index index_test4 on test4(id);
完成

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值