今天看《oracle database 11g 管理艺术》的时候,看到show recyclebin;的命令,自己以前听说过,但是没有用过,趁这个机会学习一下!
网上摘录(eygle老师):
-- 8.3.2 Oracle 10g 的 flashback drop 功能 ( P351 )
-- 在生产环境中,可能用户会因为误操作而drop掉了有用的数据表,从而导致了严重的数据库故障,在以前的版本中,恢复这样的错误一般需要通过备份进行不完全恢复,
-- 为了加快这类用户错误的恢复过程,Oracle 10g提供了flashback drop的功能。
-- Oracle 10g的flashback drop功能允许你从当前数据库中恢复一个被drop了的对象,在执行drop操作时,现在Oracle不是真正删除它,
-- 而是将该对象自动将放入回收站(RecycleBin),对于一个对象的删除,Oracle其实仅仅就是进行了类似重命名操作。
-- 所谓的回收站,是一个虚拟的容器,用于存放所有被删除的对象。在回收站中,被删除的对象将占用创建时的同样的空间,你甚至还可以对已经删除的表查询,
-- 也可以利用flashback功能来恢复它,这个就是flashback drop功能。
-- 回收站内的相关信息可以从recyclebin/user_recyclebin/dba_recyclebin等视图中获取,或者通过SQL*Plus的show recyclebin命令查看。
自己的测试过程:
因为sysdba的drop操作不会被记录,Oracle也从不推荐用户使用sysdba身份创建用户对象;
SQL> conn / as sysdba
已连接。
SQL> create table test01 (name varchar2(30));
表已创建。
SQL> show recyclebin;
SQL> drop table test01;
表已删除。
SQL> show recyclebin;
可以看到recyclebin下并没有内容显示。
现在我们创建测试用户test01,并用它进行测试:
SQL> create user test01 identified by test01;
用户已创建。
SQL> grant connect,resource to test01;
授权成功。
SQL> grant create table to test01;
授权成功。
SQL> conn test01/test01
已连接。
SQL> create table test01 (name varchar2(30));
表已创建。
SQL> show recyclebin;
SQL> drop table test01;
表已删除。
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
TEST01 BIN$fVHKxIldQQe2kfZMgC8m6Q==$0 TABLE 2011-01-16:15:21:32
SQL>
可以看到recyclebin里面drop的table:TEST01
怎么从recyclebin里面恢复?
SQL> flashback table test01 to before drop;
闪回完成。
SQL> conn test01/test01;
已连接。
SQL> SELECT table_name FROM user_tables;
TABLE_NAME
------------------------------
TEST01
在这里实际用到了一个user_tables的视图。最开始学oracle的时候就学习了dba_,
all_,user_,但是没有做到活学活用,学习之大忌!!
补充测试:
怎么彻底drop而不放在recyclebin里?
SQL> drop table test01 purge;
表已删除。
SQL> show recyclebin;
SQL>
怎么删除recyclebin里的表?
SQL> purge table test01;
实际操作中,有可能遇到这样的情况,你删除了一个表test01,它保存在recyclebin里。然后你又重建了一个test01,这时候如果你flashback就会报错,需要rename
SQL> show user
USER 为 "TEST01"
SQL> create table test01 (name varchar2(30));
表已创建。
SQL> drop table test01;
表已删除。
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
TEST01 BIN$D+wmdHBzQC6sNt3/64S/tA==$0 TABLE 2011-01-16:15:43:29
SQL> create table test01(name varchar2(30));
表已创建。
SQL> flashback table test01 to before drop;
flashback table test01 to before drop
*
第 1 行出现错误:
ORA-38312: 原始名称已被现有对象使用
SQL> flashback table test01 to before drop rename to test02;
闪回完成。
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
TEST02
TEST01
SQL>
关于recyclebin的总结先到这里,以后再补充
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22821701/viewspace-683912/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22821701/viewspace-683912/