知识面是由知识点组成的,你在研究某一个知识点的时候常常会遇到另一个知识点,然后你去研究那个知识点,又会带出更多的知识点,最终组成了知识面。

今天在看书的时候看到一个删除表的语句:

DROP TABLE AAA CASCADE CONSTRAINTS PURGE;

平时自己删除表,用的仅仅是DROP TABLE TABLENAME,后边从来没加过这几个参数,感觉好奇就找了几个资料研究了一番。

先说参数 CASCADE CONSTRAINTS

抄袭开始:

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

关于 cascade constraints

假设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。

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

再说参数 PURGE

这个参数比较有意思,看了几篇文章才搞明白。

参考文章:

DROP TABLE ** CASCADE CONSTRAINTS PURGE

浅谈Oracle闪回删除表限制

========================【拿来主义】========================

Oracle从10G开始支持DDL语句闪回,免去了之前误删除(DROP)表后恢复起来很困难的麻烦。9i版本恢复误删除的表很困难,具体怎么困难,我不知道。但是,10G后恢复就很简单了,那就是Oracle提供了flashback drop新特性。

使用flashback drop功能的注意事项(一下情况不能使用次功能):

1:表的存储表空间不能为system
2: 表被删除的时候不能带purge参数
3:存在空间压力的时候
4:表上面启用了细粒度审计
5:表启用了VPD

(题外话:这个4和5对我来说又是新的知识点,哎,抽时间再研究吧。)

开启回收站功能:

  1. SQL> show parameter recyclebin;

  2. NAME                                 TYPE        VALUE

  3. ------------------------------------ ----------- ------------------------------

  4. recyclebin                           string      on

实验测试flashback drop功能:

创建表AAA:

SQL> create table aaa (name varchar2(20));

Table created

向表AAA插入数据:

SQL> insert into aaa values ('1234');

1 row inserted

SQL> insert into aaa values ('1234');

1 row inserted

查询数据:

SQL> select * from aaa;

NAME

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

1234

1234

查询user_recyclebin中有没有关于AAA的记录:

SQL> select * from user_recyclebin where original_name ='AAA';

OBJECT_NAME                    ORIGINAL_NAME                    OPERATION TYPE                      TS_NAME                        CREATETIME          DROPTIME               DROPSCN PARTITION_NAME                   CAN_UNDROP CAN_PURGE    RELATED BASE_OBJECT PURGE_OBJECT      SPACE

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

(没有数据)

删除AAA:

SQL> drop table aaa;

Table dropped

SQL> select * from user_recyclebin where original_name ='AAA';

OBJECT_NAME                    ORIGINAL_NAME                    OPERATION TYPE                      TS_NAME                        CREATETIME          DROPTIME               DROPSCN PARTITION_NAME                   CAN_UNDROP CAN_PURGE    RELATED BASE_OBJECT PURGE_OBJECT      SPACE

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

BIN$ljh1zkU8SUqaTs8kGHS6mg==$0 AAA                              DROP      TABLE                     TS_FPZX_DAT                    2015-02-03:16:50:10 2015-02-03:16:51:05   29344784                                  YES        YES            94499       94499        94499          8

再次查询表(已经被删除)

SQL> select * from aaa;

select * from aaa

ORA-00942: 表或视图不存在

再次建立表AAA:

SQL> create table aaa (name varchar2(20));

Table created

插入数据:

SQL> insert into aaa values ('abcd');

1 row inserted

SQL> insert into aaa values ('abcd');

1 row inserted

不查询了,直接删除吧:

SQL> drop table aaa;

Table dropped

再次查询变化:

SQL> select OBJECT_NAME,ORIGINAL_NAME,OPERATION,TYPE,CREATETIME,DROPTIME from user_recyclebin where original_name ='AAA';

OBJECT_NAME                    ORIGINAL_NAME  OPERATION    TYPE   CREATETIME            DROPTIME

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

BIN$ljh1zkU8SUqaTs8kGHS6mg==$0 AAA             DROP       TABLE   2015-02-03:16:50:10  2015-02-03:16:51:05

BIN$pk7Yt+SeRhOpF7UvsMuTrg==$0 AAA             DROP       TABLE   2015-02-03:16:52:04  2015-02-03:16:52:20

此时user_recyclebin中有两条关于AAA的记录,我们此时要是用语句恢复数据的话,恢复的是第二次删除的表中的数据:

SQL> flashback table aaa to before drop;

Done

查询数据:

SQL> select * from aaa;

NAME

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

abcd

abcd

此时user_recyclebin 表中只剩一条数据了,这个数据中的表AAA,保存的就是第一张表里边的‘1234’的数据。我们来还原它的话需要另命名,因为已经恢复了AAA:

SQL> select OBJECT_NAME,ORIGINAL_NAME,OPERATION,TYPE,CREATETIME,DROPTIME from user_recyclebin where original_name ='AAA';

OBJECT_NAME                    ORIGINAL_NAME  OPERATION    TYPE   CREATETIME            DROPTIME

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

BIN$ljh1zkU8SUqaTs8kGHS6mg==$0 AAA             DROP       TABLE   2015-02-03:16:50:10  2015-02-03:16:51:05

闪回第一张AAA,加上rename关键字:

SQL> flashback table aaa to before drop rename to AAA2;

Done

查询数据:

SQL> select * from aaa2;

NAME

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

1234

1234

另:

>>>>>>PURGE TABLESPACE USER SCOTT;  //清除特定表空间特定用户的回收站

>>>>>>PURGE DBA_RECYCLEBIN;      //清除任何表空间中的所有对象

flashback drop(2015-2-3学习日记)的更多相关文章

  1. Linux学习日记-使用EF6 Code First(四)

    一.在linux上使用EF 开发环境 VS2013+mono 3.10.0 +EF 6.1.0 先检测一下EF是不是6的 如果不是  请参阅 Linux学习日记-EF6的安装升级(三) 由于我的数据库 ...

  2. 2015 WEB前端学习路线图

    2015 WEB前端学习路线图,欢迎小伙伴补充 @落雨

  3. android学习日记05--Activity间的跳转Intent实现

    Activity间的跳转 Android中的Activity就是Android应用与用户的接口,所以了解Activity间的跳转还是必要的.在 Android 中,不同的 Activity 实例可能运 ...

  4. android学习日记03--常用控件Dialog

    常用控件 9.Dialog 我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框 对话框,要创建对话框之前首先要创建Bui ...

  5. android学习日记03--常用控件checkbox/radiobutton

    常用控件3.checkbox 复选框,确定是否勾选,点击一下勾选,点击第二下取消,当有一系列备选项时适合用checkbox控件,方便用户提交数据. 贴上例子Activity的java代码 packag ...

  6. android学习日记03--常用控件button/imagebutton

    常用控件 控件是对数据和方法的封装.控件可以有自己的属性和方法.属性是控件数据的简单访问者.方法则是控件的一些简单而可见的功能.所有控件都是继承View类 介绍android原生提供几种常用的控件bu ...

  7. Zend Framework学习日记(2)--HelloWorld篇(转)

    Zend Framework学习日记(2)--HelloWorld篇 这一篇主要演示如何用zf命令行工具建立一个基于Zend Framework框架的工程,也是我初学Zend Framework的小练 ...

  8. Zend Framework学习日记(1)--环境搭建篇(转)

    Zend Framework学习日记(1)--环境搭建篇 (1)开发工具 Zend Framework框架:http://framework.zend.com/download/latest 包含2个 ...

  9. Python 学习日记(第三周)

    知识回顾 在上一周的学习里,我学习了一些学习Python的基础知识下面先简短的回顾一些: 1Python的版本和和安装 Python的版本主要有2.x和3.x两个版本这两个版本在语法等方面有一定的区别 ...

随机推荐

  1. MySql中常用语句

    1.查询语句: SELECT  查询字段  FROM  表名   WHERE 条件 查询字段可以使用 通配符* 字段名 别名(把长的名字命名一个别名,比较短的) 通配符:SELECT * FROM ' ...

  2. SQLServer数据库 导出表和导入sql脚本

    1.选择需要导出表的数据库--任务---生成脚本 2.显示:生成和发布脚本窗口--简介(某些可能关闭该页面的,可以省略该步骤),点击下一步 3.显示:生成和发布脚本窗口--选择对象--按照图片操作即可 ...

  3. ObjectCopy

    对象的传参用的是传引用,但开发中通常不允许对传入参数进行修改.因此对象拷贝很常用,Python提供一个很方便的对象拷贝方法 如代码: __author__ = 'mengxuan' import co ...

  4. DataGridView出现大红叉--在使用多线程访问数据源时

    datagridview 的数据源操作在一个方面里面处理 不要多个地方处理 并且处理的时候要加锁 红叉 应该是多线程操作出现的. try catch  只是起到 捕获异常的功能,但是一旦出现了这种错误 ...

  5. Quartz2D学习笔记(1)

    ********************************** 简介 *************************************** Quartz2D是⼀个二维绘图引擎,同时支持 ...

  6. Protel DXP画原理图常见错误与警告

    一.警告信息 警告信息对于将来转换成PCB不会造成严重问题,通常可以忽略.但它也给我们提供了一些参考,比如unconnceted pin能告诉我们芯片的哪些管脚没有连接,很有检错意义. 1.has n ...

  7. C# net部署图片分布式存储服务器的小案例

    如果web服务用户多了,访问多了,用户上传的图片,文件等内容放在一块,想必服务器是承受不住的,这个时候,我们就需要考虑分布式存储的方法了. 如图所示:一个web服务器拖2个图片服务器 如何做到用户上传 ...

  8. WebService学习整理(一)——客户端三种调用方式整理

    1 WebService基础 1.1 作用 1,       WebService是两个系统的远程调用,使两个系统进行数据交互,如应用: 天气预报服务.银行ATM取款.使用邮箱账号登录各网站等. 2, ...

  9. C#方法定义和调用-2

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  10. BZOJ 3707: 圈地 计算几何

    Description 2维平面上有n个木桩,黄学长有一次圈地的机会并得到圈到的土地,为了体现他的高风亮节,他要使他圈到的土地面积尽量小.圈地需要圈一个至少3个点的多边形,多边形的顶点就是一个木桩,圈 ...