DROP TABLE

使用DROP TABLE语句将表或对象表移动到回收站或从数据库中完全删除表及其所有数据。

注:除非指定purge子句,否则drop table语句不会将表占用的空间释放回表空间供其他对象使用,占用空间继续计入用户的空间配额。

对于外部表,此语句只删除数据库中的表元数据。它不会影响实际数据,实际数据位于数据库之外。

删除属于群集的表时,该表将移动到回收站。但是,如果随后除去集群,那么表将从回收站清空,不能再使用FLASHBACK TABLE进行恢复操作。

删除表将使依赖对象失效,并删除表上的对象特权。如果要重新创建表,则必须重新授予表的对象权限,重新创建表的索引、完整性约束和触发器,并重新指定其存储参数。TRUNCATE没有这些效果。因此,使用truncate语句删除行比删除和重新创建表更有效。

先决条件

该表必须在您自己的模式中,或者您必须具有 DROP ANY TABLE系统权限。

只有在没有会话绑定到临时表时,才能对其执行DDL操作(如更改表、删除表、创建索引)。通过对表执行插入操作,会话将绑定到临时表。通过发出runcate语句或在会话终止时,或者对于事务特定的临时表,通过发出commit或rollback语句,会话将解除与临时表的绑定。

语义

模式

指定包含表的模式。如果省略了模式,那么Oracle数据库假定表在您自己的模式中。

指定要删除的表的名称。Oracle数据库自动执行以下操作:

  • 删除表中的所有行。
  • 删除所有表索引和域索引,以及表上定义的任何触发器,无论是谁创建的索引或是谁的模式包含这些索引。如果是分区表,那么任何相应的本地索引分区也将删除。
  • 删除嵌套表的所有存储表和表的LOB。
  • 删除一个 range-, hash-, 或 list-分区表时,数据库将删除所有表分区。如果删除一个复合分区表,那么所有分区和subpartitions也将被删除。
  • 当使用purge关键字删除分区表时,该语句将作为一系列子事务执行,每个子事务都会删除分区或子分区的子集及其元数据。这种将删除操作分为子事务的划分优化了内部系统资源消耗的处理。(例如,库缓存),尤其是用于删除非常大的分区表。一旦第一个子事务提交,表就被标记为UNUSABLE。如果有subtransactions失败,那么表上唯一允许的操作是另一个DROP TABLE ... PURGE语句。这样的语句将从上一个drop table语句失败的位置恢复工作,假定您已更正了上一个操作遇到的任何错误。您可以通过查询数据字典视图(视情况而定) *_TABLES, *_PART_TABLES, *_ALL_TABLES, 或*_OBJECT_TABLES的status列,列出此类删除操作标记为UNUSABLE的表。
  • 对于索引组织表,删除索引组织表上定义的任何映射表。
  • 对于域索引,调用适当的删除例程。有关这些例程的详细信息,请参阅《Oracle Database Data Cartridge Developer's Guide》。
  • 如果有任何统计类型与表关联,则数据库将使用force子句取消统计类型的关联,并删除使用统计类型收集的任何用户定义的统计。
  • 如果表不是集群的一部分,那么数据库会将分配给该表的所有数据块及其索引返回到包含该表及其索引的表空间。要除去一个集群及其所有表,请将drop cluster语句与including tables子句一起使用,以避免单独除去每个表。请参见DROP CLUSTER。
  • 如果表是视图、容器或物化视图的主表的基表,或者如果它在存储过程、函数或包中引用,则数据库会使这些依赖对象失效,但不会删除它们。你不能使用这些对象,除非您重新创建表或删除并重新创建对象,以便它们不再依赖于表。如果选择重新创建表,则它必须包含最初用于定义物化视图的子查询所选的所有列以及存储过程、函数或包中引用的所有列。以前授予视图、存储过程、函数或包不需要重新授予这些特权。如果该表是物化视图的主表,则仍然可以查询物化视图,但除非重新创建该表,以便包含物化视图定义查询所选的所有列,否则无法刷新该表。如果表具有物化视图日志,那么数据库将删除此日志以及与该表关联的任何其他直接路径 INSERT 刷新信息。

删除表的限制

  • 不能直接删除嵌套表的存储表。相反,必须使用 ALTER TABLE ... DROP COLUMN子句删除嵌套表列。
  • 不能删除引用分区表的父表。必须首先删除所有引用分区子表。
  • 不能删除使用回闪数据存档进行历史跟踪的表。必须首先禁用该表使用回闪数据存档。

级联约束

指定 CASCADE CONSTRAINTS 以删除引用已删除表中的主键和唯一键的所有引用完整性约束。如果省略此子句,并且存在此类引用的完整性约束,那么数据库将返回一个错误,而不会删除表。

PURGE

如果要在单个步骤中删除表并释放与其关联的空间,请指定purge。如果指定了purge,则数据库不会将表及其依赖对象放入回收站。

注:不能回滚用purge子句删除的表,也不能恢复该表。

使用这个子句相当于首先删除表,然后从回收站清除它。这个子句在删除过程中省去了一个步骤。它还提供了增强的安全性,防止敏感材料出现在回收站。

Oracle Drop Table的更多相关文章

  1. Oracle drop table 和 truncate table对grant授权的影响

    [oracle@crl ~]$ rlwrap sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Tue May 16 14: ...

  2. oracle drop table and purge

    一.drop表 执行drop table xx 语句 drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉.这样,回收站里的表信息就可以被恢复,或彻底清除. 通过查询回收站 ...

  3. oracle drop table(表)数据恢复方法

    今天不小心把系统用户表给drop掉了,正在运行的系统正式库啊,还好可以恢复 一.查看数据库回收站,看删除的表是否还在回收站select object_name,original_name,partit ...

  4. Oracle Drop表并未直接删除 drop table xx purge

    drop表 执行drop table xx 语句     drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉.这样,回收站里的表信息就可以被恢复,或彻底清除.     通 ...

  5. ORACLE中Drop table cascade constraints之后果.

    当你要drop一个table时,如果删除table的动作会造成trigger或constraint产生矛盾,系统会出现错误警告的讯息而不会允许执行..一个极简单的例子,例如你有一个员工基本资料表,上面 ...

  6. oracle delete t1;drop table t1;drop table t1 purge

    Truncate tableTruncate table t1;Ddl语言,自动提交:不能回退:回收范围::挪动高水位线:将所有的数据清除,保留表结构:将表缩的最小:保留表的约束和权限. Drop t ...

  7. Oracle诊断:drop table失败[转]

    转: From <http://blog.csdn.net/cyxlxp8411/article/details/7775113> 今天在drop一张表的时候报ORA-00054错误 SQ ...

  8. DROP TABLE ** CASCADE CONSTRAINTS PURGE删除表的时候级联删除从表外键

    1.关于 cascade constraints 假设A为主表(既含有某一主键的表),B为从表(即引用了A的主键作为外键). 则当删除A表时,如不特殊说明,则 drop table A 系统会出现错误 ...

  9. Oracle10g 回收站及彻底删除table : drop table xx purge

    drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉.这样,回收站里的表信息就可以被恢复,或彻底清除. 1.通过查询回收站user_recyclebin获取被删除的表信息, ...

随机推荐

  1. Flutter Android 正式打包、以及升级应用 重新打包

    Flutter Android 正式打包 打开androidStudio软件 1.修改版本号. android->app->src->main->AndroidManifest ...

  2. Appium脚本(2):元素检测

    场景: 有的按钮在第一次打开时显示,之后就不显示了,如更新提示.特性介绍等,面对这样的场景写了如下脚本,增加脚本的复用性. no_element_exception_2.py from appium ...

  3. [LeetCode] 680. Valid Palindrome II 验证回文字符串 II

    Given a non-empty string s, you may delete at most one character. Judge whether you can make it a pa ...

  4. [LeetCode] 681. Next Closest Time 下一个最近时间点

    Given a time represented in the format "HH:MM", form the next closest time by reusing the ...

  5. springboot-把web项目打成war包部署到外部tomcat

    将打包方式修改为war <packaging>war</packaging> 移除tomcat依赖或者将tomcat依赖scope改为provide 移除tomcat依赖 &l ...

  6. 修改服务器时间以后 cookie无法保存

    修改了服务器时间以后发现,cookie无法保存.通过查看异步请求的响应头信息  Date是之前修改的信息,并不是当前的时间. header('Date: Mon, 17 Mar 2015 05:34: ...

  7. maven环境搭建教程

    1.下载和解压 访问   maven.apache.org   .点击download 下载对应系统的文件,window下载bin的zip文件. maven需要java1.7jdk支持,如果jdk没有 ...

  8. wmi的作用

    WMI是Windows 2K/XP管理系统的核心,对于其他的Win32操作系统,WMI是一个有用的插件. WMI的作用是: ①通过它可以访问.配置.管理和监视几乎所有的Windows资源,比如用户可以 ...

  9. 【C++札记】虚继承

    由于多重继承产生的二义性引入了类的虚继承,先看下什么是二义性. 类D是类B和类C的派生类,而类B,类C就是继承于类A,当D调用类A中的函数时不知道是类B继承A的,还是类C继承A的,引起了二义性.虚继承 ...

  10. rest_framework框架——版本控制组件

    API版本控制可以用来在不同的客户端使用不同的行为.REST框架提供了大量不同的版本设计. 版本控制是由传入的客户端请求决定的,并且可基于请求URL,或者基于请求头. rest_framework 当 ...