【问题标题】:Oracle 12c - drop table and all associated partitionsOracle 12c - 删除表和所有关联的分区
【发布时间】:2018-03-31 17:18:26
【问题描述】:

我在 Oracle 12c 中创建了表 t1。 表有数据,在列表分区上分区,也有子分区。

现在我想删除整个表和所有关联的分区(和子分区)。

这是删除所有命令的正确命令吗?

DROP TABLE t1 PURGE; 

【问题讨论】:

  • 您可以使用它,但它也可以在没有 PURGE 的情况下使用。然后,整个表被移动到 Recyclebin 中,如果您意识到它并不是要删除此表,您可以轻松地恢复它。如果您确定,那么您可以随后手动清除回收站。使用 PURGE,表不会移动到 RecycleBin,因此,撤消此操作需要付出很大的努力。

标签: oracle sql-delete partitioning drop-table


【解决方案1】:

语法是正确的,但不是可取的,

直接删除而不进行清除,以便在您需要时可以将其取回,如果您启用了闪回选项。如果您的数据库的闪回选项负责,您可以发出此命令(前提是您不使用清除):

SQL> DROP TABLE T1;
SQL> FLASHBACK TABLE T1 TO BEFORE DROP RENAME TO T1_ver_2;

【讨论】:

    【解决方案2】:

    当您运行DROP 时,该表将从数据库中完全删除,即该表不再存在。

    如果您只想从该表中删除所有数据,请运行

    truncate table T1 drop storage;
    

    如果需要,您还可以截断单个(子)分区。

    【讨论】:

    • 只是截断并不总是最好的选择,因为所有分区都是空的,但仍然存在于物理上,即使它们在以后的任何时间点都不会被使用,并且可能会影响查询-性能,如果分区键不允许分区修剪。
    • @D.Lohrsträter 我不这么认为,因为DROP STORAGE 子句,分区没有任何数据或空白空间(或者可能只有1个扩展),它只存在于数据字典中.
    • 是的,存储将消失,但分区仍然存在。我自己的情况是旧分区和不幸的 WHERE 条件,这需要一个 execplan 来扫描数百个分区中的每一个。由于每天执行数百万次,如果它可以省略检查数百个空分区,则每次可能会产生很小的差异。说实话,这个细节我还没有验证。
    • 是的,扫描数百个分区需要时间。但是一个空的应该没有任何区别。
    猜你喜欢
    • 1970-01-01
    • 2019-05-11
    • 2020-04-15
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多