在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中属于该表空间的对象。