Oracle  删除表定义
当不再需要某个表时,就可以删除该表的定义。需要注意,一般情况下用户只能删除自己模式中的表,如果用户要删除其他模式中的表,则用户必须具有DROP ANY TABLE系统权限。删除表所使用的DROP TABLE语句如下:
SQL> drop table employees;
表已删除。
删除表定义与删除表中所有数据不同,当用户使用DELETE语句进行删除操作时,删除的仅是表中的数据,该表仍然存在数据库中;DROP TABLE语句在删除表定义时,不仅表中的数据将丢失,而且该表的定义信息也将从数据库中删除,用户也就不再可以向该表添加数据。
在删除一个表定义时,Oracle将执行如下的一系列操作:
删除表中所有的记录。
从数据字典中删除该表的定义。
删除与该表相关的所有索引和触发器。
回收为该表分配的存储空间。
如果有视图或PL/SQL过程依赖于该表,这些视图或PL/SQL过程将被置于不可用状态。
在DROP TABLE语句有一个惟一的可选子句CASCADE CONSTRAINTS。当使用该参数时,DROP TABLE不仅仅删除该表,而且所有引用这个表的视图、约束或触发器等也都被删除。
SQL>drop table employees cascade constraints;
一般情况下,当用户删除了一个表定义后,数据库并不会马上释放该表占用的空间,而是将它重命名,然后放到了回收站中。这样当用户需要还原该表时,就可以使用FLASHBACK TABLE语句进行还原。如果想在删除表定义时立即释放空间,则可以在DROP TABLE语句中使用PURGE选项。
例如,下面的实例将演示如何利用Oracle 11g的闪回功能,快速恢复被删除的表EMPOYEE
S:
(1)首先确认EMPLOYEES表是否已经被删除。
SQL> select * from employees;
select * from employees
              *
第 1 行出现错误:
ORA-00942: 表或视图不存在
(2)从查询结果中可以看出该表已经被删除。可以查询数据字典视图RECYCLEBIN,以了解在回收站中存放的被删除的表。
SQL> select object_name,original_name
  2  from recyclebin
  3  where original_name='EMPLOYEES';
OBJECT_NAME                        ORIGINAL_NAME
drop删除表------------------------------                  -------------------
BIN$/JLYArbfRpyqUqsEzAwFZA==$0      EMPLOYEES
BIN$1AkzE5e8TOS1CNyirFdTuA==$0      EMPLOYEES
BIN$JA87cseLQeKpgMsj8xb0Eg==$0      EMPLOYEES
BIN$FL4Ok0g9SpuJc923oHrzcw==$0      EMPLOYEES
BIN$1yuMBPpeQy+Dwxx00ItqHQ==$0    EMPLOYEES
BIN$T4ql8udRSdGIqbfNn7lq7g==$0        EMPLOYEES
BIN$uh5CMxhOR2uZQdiuFUEU7w==$0    EMPLOYEES
BIN$foqtLtbcSce5xnAPhDYFmQ==$0      EMPLOYEES
BIN$Ww69nxeHSle/QKoAy9Go8w==$0    EMPLOYEES
已选择9行。
在OBJECT_NAME列显示了在回收部中被重命名的对象名,ORIGINAL_NAME列则是该对象原来的名称。
(3)最后使用FLASHBACK TABLE语句恢复被删除的EMPLOYEES表。
SQL> flashback table employees to before drop;
闪回完成。
SQL> select * from employees;
未选定行

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。