Oracle Drop Table

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子句删除的表,也不能恢复该表。

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

原文地址:https://www.cnblogs.com/zhaochunyi/p/10873620.html

时间: 2024-08-11 23:35:05

Oracle Drop Table的相关文章

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

1.以sys登陆,建表赋予权限,准备测试表z2 [[email protected] ~]$ rlwrap sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Tue May 16 14:59:27 2017 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition

oracle drop table recyclebin恢复

1. 连接sqlplus 创建一个表 SQL> conn liang/chengce243 Connected. QL> create table T8 as select * from user_objects; Table created. SQL> select count(*) from T8; COUNT(*) ---------- 7 2.删除T8表 SQL> drop table T8; Table dropped. SQL> select count(*) f

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

今天不小心把系统用户表给drop掉了,正在运行的系统正式库啊,还好可以恢复 一.查看数据库回收站,看删除的表是否还在回收站select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recyclebin; 二.恢复表结构和数据 FLASHBACK TABLE 表名 TO BEFORE DROP;

Oracle Flashback Drop: Undo a DROP TABLE Operation

7.4 Oracle Flashback Drop: Undoa DROP TABLE Operation Oracle Flashback Drop reverses theeffects of a DROP TABLE operation. It can be used to recover afterthe accidental drop of a table. Flashback Drop is substantially faster thanother recovery mechan

Oracle tips:drop table和purge

在操作Oracle时,我们经常都会删除一个表,当删除错误后,我们希望能够恢复该表,有时也希望删除表之后能够立刻释放表的空间.下面将介绍在Oracle中表的删除.恢复和空间释放. DROP TABLE 当你drop一个表时,数据库不会立刻释放表的空间,而是重命名这个表然后将其放入回收站中,可以通过下面的方式查看一个删除的表: select object_name,original_name from user_recyclebin where original_name = 'TEMP'; OBJ

oracle数据库中drop table与purge使用实例

oracle 数据库中 drop table 与purge 实际示例: CREATE OR REPLACE PROCEDURE pro_droptable IS cursor cur is select table_name from user_tables where table_name like 'TEMPTABLE%'; drop_sql     varchar2(1000); table_number number; BEGIN SELECT COUNT(*) INTO table_n

oracle 11g drop table 后闪回

--初始化数据 drop table test purge; create table test as select * from dba_objects; delete from test where object_id is null; alter table test add constraint pk_test_object_id primary key(object_id); create index ind_t_object_name on test(object_name); --

Oracle诊断:drop table失败[转]

转: From <http://blog.csdn.net/cyxlxp8411/article/details/7775113> 今天在drop一张表的时候报ORA-00054错误 SQL> drop table t2; drop table t2 * ERROR at line 1: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired google之后,参考网上的高手,操作如下:

ORACLE中Drop table cascade constraints

出处:https://www.cnblogs.com/xd502djj/archive/2010/11/16/1878392.html 当你要drop一个table时,如果删除table的动作会造成trigger或constraint产生矛盾,系统会出现错误警告的讯息而不会允许执行..一个极简单的例子,例如你有一个员工基本资料表,上面可能有员工编号和员工姓名等字段,另外有一个员工销售表,上面有员工编号和员工销售额两个字段,员工薪资表的员工编号字段为一个foreign key参照到员工基本资料表的