recyclebin测试学习

今天看《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的总结先到这里,以后再补充001.gif

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22821701/viewspace-683912/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22821701/viewspace-683912/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值