Oracle Purge和drop的区别
发布网友
发布时间:2022-04-12 10:52
我来回答
共3个回答
热心网友
时间:2022-04-12 12:21
Oracle 10g提供的flashback drop 新特性为了加快用户错误操作的恢复,Oracle10g提供了flashback drop的功能。而在以前的版本中,除了不完全恢复,通常没有一个好的解决办法。
Oracle 10g的flashback drop功能,允许你从当前数据库中恢复一个被drop了的对象,在执行drop操作时,现在Oracle不是真正删除它,而是将该对象自动将放入回收站。对于一个对象的删除,其实仅仅就是简单的重令名操作。
所谓的回收站,是一个虚拟的容器,用于存放所有被删除的对象。在回收站中,被删除的对象将占用创建时的同样的空间,你甚至还可以对已经删除的表查询,也可以利用flashback功能来恢复它,这个就是flashback drop功能。
回收站内的相关信息可以从recyclebin/user_recyclebin/dba_recyclebin等视图中获取,或者通过SQL*Plus的show recyclebin 命令查看。
顺序执行下列语句:
SELECT COUNT(*) FROM TAB; //假设得到的是 5
DROP TABLE T1; //执行完之后,多出一个类似 AJSKLBEWMBV 的表,允许你反悔。
SELECT COUNT(*) FROM TAB; //依然是 5,因为 T1 只是被更名了。
DROP TABLE T2 PURGE //执行完之后,你后悔也来不及了。
SELECT COUNT(*) FROM TAB; //得到的是 4
热心网友
时间:2022-04-12 13:39
回收站打开的情况下
drop table tableA; 删除表 表会改名进回收站
drop table tableA purge; 不经过回收站直接删除
purge recyclebin; 清空回收站
例子:
SQL> create table test(id int);
表已创建。
SQL> insert into test values(100);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from recyclebin;
未选定行
SQL> drop table test;
表已删除。
SQL> commit;
提交完成。
SQL> select * from recyclebin;
OBJECT_NAME ORIGINAL_NAME OPERATION
------------------------------ -------------------------------- ---------
TYPE TS_NAME CREATETIME
------------------------- ------------------------------ -------------------
DROPTIME DROPSCN PARTITION_NAME CAN CAN
------------------- ---------- -------------------------------- --- ---
RELATED BASE_OBJECT PURGE_OBJECT SPACE
---------- ----------- ------------ ----------
BIN$EHDmXgpnOAngUwEAAH9gDQ==$0 TEST DROP
TABLE USERS 2015-03-04:13:40:50
2015-03-04:13:41:15 6307662 YES YES
94927 94927 94927 8
SQL> create table test2 as select * from "BIN$EHDmXgpnOAngUwEAAH9gDQ==$0";
表已创建。
SQL> select * from test2;
ID
----------
100
SQL> purge recyclebin;
回收站已清空。
SQL> select * from recyclebin;
未选定行
SQL> drop table test2 purge;
表已删除。
SQL> commit;
提交完成。
SQL> select * from recyclebin;
未选定行
热心网友
时间:2022-04-12 15:14
drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉。这样,回收站里的表信息就可以被恢复,或彻底清除。
若要彻底删除表,则使用语句:drop table <table_name> purge;
清除回收站里的信息
清除指定表:purge table <table_name>;