天天看点

关于cascade constraints,purge

 1、关于 cascade constraints

      DROP TABLE ** CASCADE CONSTRAINTS PURGE

      假设A为主表(既含有某一主键的表),B为从表(即引用了A的主键作为外键)。

则当删除A表时,如不特殊说明,则 drop table A 系统会出现错误警告的讯息而不会允许执行。

此时必须用,drop table A cascade constraints;

SQL> select CONSTRAINT_NAME,TABLE_NAME from dba_constraints where owner = 'SYS' and TABLE_NAME = 'B'

no rows selected

我们可以发现利用Drop table cascade constraints可以刪除从表的constraint來达成你drop table t的目的,原來属于B的foreign key constraint已经跟随着被删除掉了,但是,储存在table B中的资料不会被删除,也就是说Drop table cascade constraints 是不影响到存储于objec里的row data。

2、关于purge

    oracle10g的新特性。在oralce 9i中只支持DML的闪回功能,到了oracle10g也支持DDL的闪回特性。

    当我们drop table A;时,其实只是将table A 放到了回收站中,改了个系统的名字。如果想彻底删除该表,需要 drop table A purge;

     或

    (1)drop table A; //将A送入回收站中

    (2)purge table A;//将A从回收站中删除

     注意:利用create global temporary table 建立的表drop时 不会进入回收站,故也不能用purge table 。。。

但是可以 drop table ...purge;

详细信息可参照:http://www.oracle.com/technology/global/cn/pub/articles/10gdba/week5_10gdba.html

Oracle9i Database 推出了闪回查询选项的概念,以便检索过去某个时间点的数据,但它不能闪回 DDL 操作,如删除表的操作。唯一的恢复方法是在另一个数据库中使用表空间的时间点恢复,然后使用导出/导入或其他方法,在当前数据库中重新创建表。这一过程需要 DBA 进行大量工作并且耗费宝贵的时间,更不用说还要使用另一个数据库进行克隆。

请使用 Oracle Database 10g 中的闪回表特性,它使得被删除表的恢复过程如同执行几条语句一样简单。让我们来看该特性是如何工作的。

首先,让我们查看当前模式中的表。

TNAME                       TABTYPE CLUSTERID------------------------    ------- ----------RECYCLETEST              TABLE

现在,我们意外地删除了该表:

SQL> drop table recycletest;

Table dropped.

现在让我们来查看该表的状态。

SQL> select * from tab;

TNAME                             TABTYPE CLUSTERID

------------------------------     ------- ----------

BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE

表 RECYCLETEST 已不存在,但是请注意出现新表 BIN$04LhcpndanfgMAAAAAANPw==$0。这就是所发生的事情:被删除的表 RECYCLETEST 并没有完全消失,而是重命名为一个由系统定义的名称。它存在于同一个表空间中,具有与原始表相同的结构。如果在该表上定义了索引或触发器,则它们也被重命名,使用与表相同的命名规则。任何相关源(如过程)都失效;原始表的触发器和索引被改为放置在重命名的表 BIN$04LhcpndanfgMAAAAAANPw==$0 上,保持被删除表的完整对象结构。

继续阅读