这里体现的是回收站中保存的表本身操作上的局限性。既然表被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 --
【Flashback】回收站中被标记删除的表不可以DML和DDL操作
分享好友
分享这个小栈给你的朋友们,一起进步吧。
订阅须知
• 所有用户可根据关注领域订阅专区或所有专区
• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询
• 专区发布评论属默认订阅所评论专区(除付费小栈外)