【问题标题】:Difference Between Drop And Drop Purge In OracleOracle中Drop和Drop Purge的区别
【发布时间】:2019-07-11 11:00:54
【问题描述】:

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

  1. 删除表表名;
  2. 删除表表名清除;

【问题讨论】:

  • 这不是Read the manual 的问题吗?又怎么可能同时是 MySQL 和 Oracle?
  • @Dems "阅读手册" ... 遗憾的是,Stackoverflow 上的大多数 Oracle 问题也是如此。

标签: sql oracle oracle10g


【解决方案1】:

通常,如果表被删除,它会被移入回收站(从 Oracle 10g 开始)。但是,如果还指定了 purge 修饰符,则该表将不可恢复地(完全)从数据库中删除。

【讨论】:

  • +1 我要补充一点,如果您不添加 purge,该表将继续使用回收站中的空间,因此如果您正在清理,最好使用它。
  • 我同意 Ben 关于空间使用的看法,使用 purge,或者我已经看到一个 truncate table,然后是 drop 以产生类似的效果。
【解决方案2】:

Oracle 数据库 10g 引入了删除表的新特性。当你 删除一个表,数据库不会立即释放与该表关联的空间 桌子。相反,数据库重命名表并将其放入回收站,它可以 如果你发现你以后用 FLASHBACK TABLE语句恢复 错误地删除了表。 如果要立即释放当时与表关联的空间 您发出 DROP TABLE 语句,然后按如下方式包含 PURGE 子句。 DROP TABLE 员工清除; 仅当您想删除表并释放空间时才指定 PURGE 在一个步骤中与之关联。如果指定 PURGE,则数据库不会 将表及其相关对象放入回收站。 注意:您不能使用 PURGE 回滚 DROP TABLE 语句 子句,如果使用 PURGE 子句删除该表,则无法恢复该表。这个 该功能在早期版本中不可用。

【讨论】:

    【解决方案3】:

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

    基本上使用 oracle10,所有已删除的表都会进入回收站,从中可以取消删除它们。使用 purge 时,您基本上会跳过回收站部分,并且您会删除表而没有撤消操作的选项。

    【讨论】:

      【解决方案4】:
      SQL>drop table table_name;
      

      此命令删除名为 table_name 的表,但在内部它被移动到 oracle 的回收站(这与在 windows 操作系统上使用 Delete 键删除任何文件/文件夹类似)。
      好处
      1. 如果需要,我们将能够恢复上面删除的表。
      缺点
      1. 仍然占用一定的内存。

      SQL>drop table table_name purge;
      

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

      优点和缺点将与上述相反。

      【讨论】:

        【解决方案5】:

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

        删除表emp_new;

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

        DROP TABLE emp_new PURGE;

        【讨论】:

        • 为什么被否决了?一些评论会有所帮助吗?对我来说它看起来是正确的..
        【解决方案6】:

        @Randy 评论很清楚,只是补充一下:

        (1) 删除表表名:

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

        (2) Drop Table Tablename Purge:

        如果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';
        

        【讨论】:

          【解决方案7】:

          删除表 table_name 清除;

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

          【讨论】:

            猜你喜欢
            • 2015-03-02
            • 2019-01-17
            • 2017-11-25
            • 1970-01-01
            • 1970-01-01
            • 2016-05-30
            • 1970-01-01
            • 2019-07-07
            • 1970-01-01
            相关资源
            最近更新 更多