10g版本开始,DROP命令的实现有所变化,如果没有特别的要求,该命令不再进行任何删除操作,而是仅仅重命名对象,从而不会再次看到这些对象而已。
我们可以使用闪回删除来恢复一张被DROP的表,命令如下
SQL> create table aaa as select * from all_users;
表已创建。
SQL> select count(*) from aaa;
COUNT(*)
----------
28
SQL> drop table aaa;
表已删除。
SQL> select count(*) from aaa;
select count(*) from aaa
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> flashback table aaa to before drop;
闪回完成。
SQL> select count(*) from aaa;
COUNT(*)
----------
28
需要注意,建立在system上的对象是无法真正入recyclebin的。所以一般来讲sysdba的用户所drop的table是无法用flashback table t to before drop命令恢复的。
system 的默认表空间是 system表空间,上一个用户的表空间是新建的。我们以system 连接数据库
SQL>conn system/system
已连接
SQL> create table aaa as select * from all_users;
表已创建。
SQL> select count(*) from aaa;
COUNT(*)
----------
28
SQL> drop table aaa;
表已删除。
SQL> select count(*) from aaa;
select count(*) from aaa
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> flashback table aaa to
flashback table aaa to befor
*
第 1 行出现错误:
ORA-38305: 对象不在回收站中
我们可以通过查询字典user_recyclebin来查询oracle的回收站。
通过show 命令我们可以查看
sql>show recyclebin 这命令总不返回结果,疑问,不知如何解决
那就查询数据字典user_recyclebin获得回收站信息
SQL> select object_name,original_name,type,droptime from user_recyclebin;
例如;恢复被删除的表emp.
SQL>flashback table emp to before drop;
如果不知道原表名,可以直接使用回收站中的名称进行闪回。
SQL>flashback table "Bin$DSbdfd4rdfdfdfegdfsf==$0" to before drop;
在回收的同时可以修改表名:
SQL>flashback table "Bin$DSbdfd4rdfdfdfegdfsf==$0" to before drop rename to emp1;
真正删除某一个表,而不进入回收站,可以在删除表时增加purge选项.如将emp表彻底删除.
SQL>drop table emp purge;
也可以通过删除recyclebin区域来永久性删除表 ,原始删除表drop table emp cascade constraints
SQL>purge table emp;
删除当前用户的回收站
SQL>purge recyclebin;
删除全体用户在回收站的数据.
SQL>purge dba_recyclebin
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23754390/viewspace-667817/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23754390/viewspace-667817/