flashback drop(2015-2-3学习日记)
知识面是由知识点组成的,你在研究某一个知识点的时候常常会遇到另一个知识点,然后你去研究那个知识点,又会带出更多的知识点,最终组成了知识面。
今天在看书的时候看到一个删除表的语句:
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从10G开始支持DDL语句闪回,免去了之前误删除(DROP)表后恢复起来很困难的麻烦。9i版本恢复误删除的表很困难,具体怎么困难,我不知道。但是,10G后恢复就很简单了,那就是Oracle提供了flashback drop新特性。
使用flashback drop功能的注意事项(一下情况不能使用次功能):
1:表的存储表空间不能为system
2: 表被删除的时候不能带purge参数
3:存在空间压力的时候
4:表上面启用了细粒度审计
5:表启用了VPD
(题外话:这个4和5对我来说又是新的知识点,哎,抽时间再研究吧。)
开启回收站功能:
SQL> show parameter recyclebin;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
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学习日记)的更多相关文章
- Linux学习日记-使用EF6 Code First(四)
一.在linux上使用EF 开发环境 VS2013+mono 3.10.0 +EF 6.1.0 先检测一下EF是不是6的 如果不是 请参阅 Linux学习日记-EF6的安装升级(三) 由于我的数据库 ...
- 2015 WEB前端学习路线图
2015 WEB前端学习路线图,欢迎小伙伴补充 @落雨
- android学习日记05--Activity间的跳转Intent实现
Activity间的跳转 Android中的Activity就是Android应用与用户的接口,所以了解Activity间的跳转还是必要的.在 Android 中,不同的 Activity 实例可能运 ...
- android学习日记03--常用控件Dialog
常用控件 9.Dialog 我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框 对话框,要创建对话框之前首先要创建Bui ...
- android学习日记03--常用控件checkbox/radiobutton
常用控件3.checkbox 复选框,确定是否勾选,点击一下勾选,点击第二下取消,当有一系列备选项时适合用checkbox控件,方便用户提交数据. 贴上例子Activity的java代码 packag ...
- android学习日记03--常用控件button/imagebutton
常用控件 控件是对数据和方法的封装.控件可以有自己的属性和方法.属性是控件数据的简单访问者.方法则是控件的一些简单而可见的功能.所有控件都是继承View类 介绍android原生提供几种常用的控件bu ...
- Zend Framework学习日记(2)--HelloWorld篇(转)
Zend Framework学习日记(2)--HelloWorld篇 这一篇主要演示如何用zf命令行工具建立一个基于Zend Framework框架的工程,也是我初学Zend Framework的小练 ...
- Zend Framework学习日记(1)--环境搭建篇(转)
Zend Framework学习日记(1)--环境搭建篇 (1)开发工具 Zend Framework框架:http://framework.zend.com/download/latest 包含2个 ...
- Python 学习日记(第三周)
知识回顾 在上一周的学习里,我学习了一些学习Python的基础知识下面先简短的回顾一些: 1Python的版本和和安装 Python的版本主要有2.x和3.x两个版本这两个版本在语法等方面有一定的区别 ...
随机推荐
- 3DMAX 建立场景 工作流程
建立3D渲染首先建立房型.毕竟我们在做的是三维房间的渲染.建立房型线有几个环节都要用到 我们看一眼最终的渲染效果. 利用我们第一步建立的房型线做模型 房型线通过膨胀变成墙壁 再通过房型线生成屋顶天花和 ...
- 使用Yii框架中遇到的三个问题
以下由我们在信易网络公司开发项目的时候终结出的一些经验 使用Yii框架中遇到的三个问题 1.main.php文件中欲引入全局变量的问题 还原一下此问题:在Yii框架中,main.php一般会作为整个应 ...
- [转]ef获取某个表中的部分字段值
我有个新闻表 id,title,body,createtime,author,click 使用ef4.1 仅仅读取 id,title,createtime 并显示在页面上. public static ...
- mvc4 membership, [Win32Exception (0x80004005): The system cannot find the file specified]
public class UsersContext : DbContext { public UsersContext() : base("conn1") //change the ...
- 让IIS识别PUT和DELETE请求
转眼间年底了,突然的我就挪了窝.新的公司,新的电脑,新的服务器....面对新环境,手有些痒,于是试着编写自己的简易版restful API. restful的话,对资源的相应操作应该被体现成http动 ...
- 文件操作 - NSFileManager
iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像android,没有SD卡概念,不能直接访问图像.视频等内容.iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内.默认 ...
- 用 OUTLOOK VBA 生成 自定义文件夹 邮件列表
Option Explicit Sub TestFolder() 'Dim outlookapp, myitem, myfolder 'Dim mailcounts As Integer ' ' 'S ...
- 【原创】Matlab中plot函数全功能解析
[原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...
- Hicharts弄个样例
前端的事情,但最好自己要了解一下,能作个最简单的东东出来... 样例,需要的时候,用用,就喟给它一样模板数据即可. PYTHON,把字典的键值和KEY值匹配成列表即可. $(function () { ...
- 转贴:C++中指针和引用的区别
从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有 ...