ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【Flashback】回收站中被标记删除的表不可以DML和DDL操作

【Flashback】回收站中被标记删除的表不可以DML和DDL操作

原创 Linux操作系统 作者:secooler 时间:2011-06-25 23:25:50 0 删除 编辑
  这里体现的是回收站中保存的表本身操作上的局限性。既然表被DROP掉后存放到了回收站中,自然会有一些局限性,例如,回收站中被标记删除的表不可以DML和DDL操作。

1.模拟表被不含有PURGE关键字的DROP语句删除
1)查看数据库版本
sec@ora10g> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

2)确认回收站功能已经开启
sec@ora10g> show parameter recyclebin

NAME        TYPE    VALUE
----------- ------- ------------
recyclebin  string  on

3)创建表T并初始化数据
sec@ora10g> create table t (x int);
sec@ora10g> insert into t values (1);
sec@ora10g> insert into t values (2);
sec@ora10g> commit;
sec@ora10g> select * from t;

         X
----------
         1
         2

3)删除T表
sec@ora10g> drop table t;

Table dropped.

2.查看回收站中的内容
sec@ora10g> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T                BIN$pnchvzFWXVTgQMKQt8Boqw==$0 TABLE        2011-06-25:22:36:49


可见,刚刚被删除的T表已经在回收站中得以体现。

3.对回收站中的表尝试查询
sec@ora10g> select * from "BIN$pnchvzFWXVTgQMKQt8Boqw==$0";

         X
----------
         1
         2

查询功能生效。

4.对回收站中的表尝试DML操作
1)尝试插入操作
sec@ora10g> insert into "BIN$pnchvzFWXVTgQMKQt8Boqw==$0" values (3);
insert into "BIN$pnchvzFWXVTgQMKQt8Boqw==$0" values (3)
            *
ERROR at line 1:
ORA-38301: can not perform. DDL/DML over objects in Recycle Bin

说明对回收站中的表进行插入操作是不可行的。

2)尝试删除操作
sec@ora10g> delete from "BIN$pnchvzFWXVTgQMKQt8Boqw==$0";
delete from "BIN$pnchvzFWXVTgQMKQt8Boqw==$0"
            *
ERROR at line 1:
ORA-38301: can not perform. DDL/DML over objects in Recycle Bin

说明对回收站中的表进行删除操作是不可行的。

3)尝试更新操作
sec@ora10g> update "BIN$pnchvzFWXVTgQMKQt8Boqw==$0" set x=100;
update "BIN$pnchvzFWXVTgQMKQt8Boqw==$0" set x=100
       *
ERROR at line 1:
ORA-38301: can not perform. DDL/DML over objects in Recycle Bin

说明对回收站中的表进行更新操作是不可行的。

通过增删改等一系列DML操作测试,表明回收站中的表不可被DML操作的。

5.对回收站中的表尝试DDL操作
以重命名操作为例演示DDL操作。
sec@ora10g> alter table "BIN$pnchvzFWXVTgQMKQt8Boqw==$0" rename to t;
alter table "BIN$pnchvzFWXVTgQMKQt8Boqw==$0" rename to t
*
ERROR at line 1:
ORA-38301: can not perform. DDL/DML over objects in Recycle Bin

说明对回收站中的表进行DDL操作是不可行的。

6.小结
  存放在回收站中的表可以使用闪回技术恢复为原始表的状态,这是它的优势。与此同时,回收站中的数据是有其自身的限制的。本文以回收站中表不可DML和DDL操作为例进行了演示。

Good luck.

secooler
11.06.25

-- The End --

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

请登录后发表评论 登录
全部评论
Oracle ACE 总监,阿里云MVP,北京大学理学硕士,恩墨学院创始人,教育专家,中国区 Cloudera 首位官方授权大数据讲师,金牌培训专家,BDA大数据联盟创始人,OCM联盟创始人,ACCUG创始人、ACOUG核心专家,Blogger。

注册时间:2008-03-16

  • 博文量
    797
  • 访问量
    8094605