【Flashback】回收站中被標記刪除的表不可以DML和DDL操作

secooler發表於2011-06-25
  這裡體現的是回收站中儲存的表本身操作上的侷限性。既然表被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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章