闪回删除(flashback drop)

来源:互联网 发布:苹果在线视频下载软件 编辑:程序博客网 时间:2024/06/10 23:27

 


  在oracle中删除对象时,这些对象以及他们的依赖对象并没有立即删除,而是更名之后临时呆在原地,oracle将尽可能地保存他们。直到遇见以下情况才彻底删除他们:
  1、用户使用purge命令删除他们。
  2、空间不足时,oracle为了回收空间自动彻底删除他们。
 
  在以下情况,对象不经过回收站而是直接删除对象:
  1、drop user username cascade  --用户的对象将直接删除
  2、drop tablespace tbs_name including contents --表空间中的对象将直接删除
  3、drop table table_name purge  --不经过回收站而是直接删除表

  回收站其实是一个数据字典表,记录被删除表的相关信息。对象被删除之后,将在回收站中记录表的信息,而表段并没有被删除,而是仍然临时存在原地。但这些空间已经被被标记为可回收空间,通过dba_free_space可以查询到这些空间。


  使用recyclebin初始化参数可以选择是否使用回收站,默认为on。如果不使用,可以设置为off。
 
二、回收站(recyclebin)

  回收站时一个名为recyclebin$的数据字典
  dba_recyclebin:包含整个数据库中回收站的内容
  user_recyclebin:记录模式中被删除的对象。并不是被本用户删除的对象,而是本模式中被删除的对象,被其他用户删除的属于本模式的对象也包含在user_recyclebin中。
  recyclebin:是user_recyclebin的同义词
  show recyclebin:可以在sql*plus中使用,仅包含可以闪回删除的对象。

  对于已经删除但保存 在回收站中的表,我们可以查询,但不能insert,update,delete 比如:
  select * from "......"  --引号内是对象的object_name,可以查询recyclebin获得。

  一个对象被删除之后,依赖该对象的对象也将被删除。该对象被恢复之后,依赖于该对象的对象也将被恢复,但这些对象被恢复之后使用的名字仍然为original_name,需要用户重命名。

三、闪回删除表

  1、flashback table table_name to before drop [rename to new_name];
  2、flashabck table " ...."  to before drop [rename to new_name];  --使用系统生成的名字,
    --当多个同名的对象被删除之后,可以使用系统生成的名字指定要闪回的对象。

  当一个表被删除之后,使用该名字再次创建表,但又被删除,这样在回收站中该表存在几个版本,使用原表名进行闪回删除,oracle将恢复该表的最新版本。

四、永久删除表
 
  1、drop table table_name purge
  2、在删除表之后,使用purge清理 :purge table table_name; purge index index_name;
    当然也可以使用系统生成的名字:purge table ".....";
    当recyclebin中存在几个original_name相同的表,使用purge则清理最旧的版本。
  3、purge tablespace tbs_name [user user_name];清理recyclebin中属于某个表空间的或者同时属于某个用户的对象。


  当删除用户时,则自动清理recyclebin中属于该用户的对象。
  当删除表空间时,即便删除表空间不成功,oracle也将清理recyclebin中属于该表空间的对象。

原创粉丝点击