闪回删除(Flashback Drop)

Flashback Drop 允许您将之前删除的表(但不是截断的表)恢复到刚好删除它之前的状态,同时还会恢复所有索引以及任何触发器和权限。唯一的主键和非空约束也会被恢复,但不包括外键。

Flashback Drop 命令仅适用于表,但是也会恢复所有相关的对象 -- 外键约束除外。

实现闪回删除

从 10g 版本的 Oracle Database 开始,DROP TABLE 命令的实现方式完全不一样。在这些版本的数据库中根本没有删除表,而只是重命名它们。

SYS@orcl11g> select file_id,block_id,bytes from dba_extents
  2  where owner='SCOTT' and segment_name='OLD_NAME';

   FILE_ID   BLOCK_ID	   BYTES
---------- ---------- ----------
	 4	  520	   65536

SYS@orcl11g> alter table scott.old_name rename to new_name;

Table altered.

SYS@orcl11g> select file_id,block_id,bytes from dba_extents
  2  where owner='SCOTT' and segment_name='NEW_NAME';

   FILE_ID   BLOCK_ID	   BYTES
---------- ---------- ----------
	 4	  520	   65536
可以看到一个表 OLD_NAME 占用了 65 KB 的空间,从 4 号文件的 520 号块开始。在把该表重命名为 NEW_NAME 后,存储空间完全相同 -- 因此表也是一样的。查询 DBA_OBJECTS.OBJECT_ID 视图将会看到表的对象号也没有变化。

已经在内部将 DROP TABLE 命令映射到 RENAME 命令,它将作用于表及其所有相关的索引、触发器和约束,但不包括外键约束(它将被删除)。

每个用户都有一个回收站,可以在 USER_RECYCLEBIN 数据字典视图中看到它,若要了解全局视图,可以查询 DBA_RECYCLEBIN。当表空间的空间不足时,可以自动重用回收站对象占用的空间(此后不能恢复对象),或者可以手动强制 Oralce 使用 PURGE 命令真正删除对象。

使用 Flashback Drop 不能保证成功执行,但是很可能会失效。越早执行该命令,成功的可能性就越大。

使用闪回删除

SQL> drop table <table_name> purge;

SQL> flashback table <table_name> to before drop rename to <new_name>;

第一条命令会真正删除表,PURGE 关键字指示 Oracle 恢复 DROP 的原始含义:删除到该表的所有引用并且永远无法恢复。

第二条命令将闪回该表并重新命名。这样做是有必要的,以防在删除和闪回期间创建了另一个与删除的表具有相同名称的表。注意,尽管在闪回期间可以对表重命名,但不能改变模式:所有闪回操作出现在对象所属的模式内。和表一同闪回的索引、触发器和约束都保持它们的回收站名称。如果希望恢复它们原先的名称,则可以在闪回操作后手动重命名。

第一:Flashback Drop 只能在执行 DROP 命令后恢复,而不能恢复 TRUNCATE 命令。

第二:如果删除了一个用户,如下这样:

SQL> drop user scott cascade;

使用闪回无法恢复任何 SCOTT 的表,将模式删除意味着 Oracle 根本无法维护对象(即使在回收站内),因为没有可供对象连接的用户。

SCOTT@orcl11g> create table drop_tab (c1 date);

Table created.

SCOTT@orcl11g> insert into drop_tab values(sysdate);

1 row created.

SCOTT@orcl11g> commit;

Commit complete.

SCOTT@orcl11g> drop table drop_tab;

Table dropped.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值