Oracle中Drop和Drop Purge之间的区别

时间:2011-10-10 13:24:57

标签: sql oracle oracle10g

我正在使用Oracle数据库,我对Drop和Purge命令感到有点困惑。事实上,对我来说,两者都做同样的事情。从数据库中删除带有模式的表。这两者之间的主要区别是什么?

  1. Drop Table Tablename;
  2. Drop Table Tablename Purge;

7 个答案:

答案 0 :(得分:41)

通常情况下,如果表被删除,表将被移动到回收站(从Oracle 10g开始)。但是,如果同时指定了清除修饰符,则表将无法从数据库中删除(完全)。

答案 1 :(得分:6)

Oracle数据库10g引入了一个用于删除表的新功能。当你 删除一个表,数据库不会立即释放与之关联的空间 表。而是,数据库重命名表并将其放在回收站中,它可以在那里 如果你发现了以后,可以使用FLASHBACK TABLE语句恢复 丢失了表格。 如果要立即释放与表关联的空间 您发出DROP TABLE语句,然后包括PURGE子句,如下所示。 DROP TABLE员工PURGE; 仅当您要删除表并释放空间时才指定PURGE 只需一步即可与之相关联。如果指定PURGE,则数据库不指定 将表及其依赖对象放入回收站。 注意:您无法使用PURGE回滚DROP TABLE语句 如果使用PURGE子句删除它,则无法恢复该表。这个 功能在早期版本中不可用。

答案 2 :(得分:3)

asktom文章的链接:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:32543538041420

基本上使用oracle10,所有丢弃的表都会进入回收站,从那里它们可以被取消。通过清除,您基本上可以跳过回收站部件,然后删除表,而无需撤消操作。

答案 3 :(得分:1)

以下语句将删除表并将其放入回收站。

DROP TABLE emp_new;

以下语句将删除表格并将其从回收站中冲出。

DROP TABLE emp_new PURGE;

答案 4 :(得分:1)

从@Randy注释中可以很明显地看出来,只需添加一下即可:

(1)删除表表名:

没有purge,该表可以位于RECYCLEBIN或USER_RECYCLEBIN中;可以使用命令FLASHBACK恢复。这类似于我们在Windows桌面中删除的文件,这些文件将移到回收站,并且可以还原回来。

(2)删除表表名清除:

如果将DropPurge一起给出,则其表空间将被释放并且无法还原。 (就像Shift + Delete在桌面上一样)

以下示例提供了实际示例:

create table test_client (val_cli integer, status varchar2(10));
drop table test_client ;

select tablespace_name from all_tables where owner = 'test' and table_name = 'TEST_CLIENT';

SELECT * FROM RECYCLEBIN where ORIGINAL_NAME='TEST_CLIENT';

SELECT * FROM USER_RECYCLEBIN where ORIGINAL_NAME='TEST_CLIENT';

FLASHBACK TABLE test_client  TO BEFORE DROP;

select tablespace_name from all_tables where owner = 'test' and table_name = 'TEST_CLIENT';

drop table test_client purge;

select tablespace_name from all_tables where owner = 'test' and table_name = 'TEST_CLIENT';

答案 5 :(得分:0)

SQL>drop table table_name;

此命令删除名为table_name的表,但在内部将其移动到oracle的回收站(这类似于在Windows OS上使用 Delete 键删除任何文件/文件夹)。
优点
1.如果需要,我们将能够恢复上面删除的表格 的缺点
1.仍占用一些记忆。

SQL>drop table table_name purge;

此命令从数据库中完全删除表table_name(类似于在Windows操作系统上使用 Shift + 删除键删除任何文件/文件夹)。

利益和缺点将与上述相反。

答案 6 :(得分:-1)

drop table table_name purge;

通过使用此查询发生了什么: - 通常情况下,表被移动到回收站(从Oracle 10g开始),如果它被删除。但仍然占用数据库中的内存,因此为了释放另一个对象的内存,我们可以使用Purge子句。