ITPub博客

首页 > Linux操作系统 > Linux操作系统 > recyclebin测试学习

recyclebin测试学习

原创 Linux操作系统 作者:mumumufang 时间:2011-01-16 15:09:24 0 删除 编辑

今天看《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博客 ” ,链接:https://blog.itpub.net/22821701/viewspace-683912/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-11-04

  • 博文量
    38
  • 访问量
    126797