Flashback Drop实例操作

1、Flashback Drop
Flashback Drop 是从Oracle 10g 开始出现的,用于恢复用户误删除的对象(包括表,索引等), 这个技术依赖于Tablespace Recycle Bin(表空间回收站)

,这个功能和windows的回收站非常类似。
Flashback 不支持sys用户. system表空间下的对象,也不能从回收站里拿到。故使用SYS 或者SYSTEM用户登陆时, show recyclebin 为空。
Flashback Drop 是基于Tablespace RecycleBin 来实现恢复的。 它只支持闪回与table 相关连的对象,比如表,索引,约束,触发器等。 如果是函数或

者存储过程等,就需要使用Flashback Query来实现。

2、Tablespace Recycle Bin
从Oracle 10g 开始, 每个表空间都会有一个叫作回收站的逻辑区域,当用户执行drop命令时, 被删除的表和表的关联对象( 包括索引, 约束,触发器

,LOB段,LOB index 段) 不会被物理删除, 这些对象先转移到回收站中,这就给用户提供了一个恢复的可能。
初始化参数recyclebin 用于控制是否启用recyclebin功能,缺省是ON, 可以使用OFF关闭。

SQL> show parameter recycle
NAME                                            TYPE            VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_recycle                         string
db_recycle_cache_size                     big                integer 0
recyclebin                                       string             on

禁用该功能:
SQL> alter system set recyclebin=off;
SQL> alter system set recyclebin=on;

SQL> alter session set recyclebin=off;
SQL> alter session set recyclebin=on;
禁用后删除的对象将直接删除,不会写到Recycle中,当然在删除时,指定purge 参数,表也将直接删除,不会写到recyclebin中。
SQL> drop table emp2;
表已删除。

查看recyclebin内容:

SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
EMP2 BIN$yBCF53QgQw+A//Sf3M4i9g==$0 TABLE 2014-10-16:14:16:07

查看recyclebin中已删除表的内容:

SQL> select * from "BIN$yBCF53QgQw+A//Sf3M4i9g==$0";

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
…

表空间的Recycle Bin 区域只是一个逻辑区域,而不是从表空间上物理的划出一块区域固定用于回收站,因此Recycle Bin是和普通对象共用表空间的存储
区域,或者说是Recycle Bin的对象要和普通对象抢夺存储空间。
当发生空间不够时,Oracle会按照先入先出的顺序覆盖Recycle Bin中的对象。

也可以手动的删除Recycle Bin占用的空间:
1). Purge tablespace tablespace_name : 用于清空表空间的Recycle Bin
2). Purge tablespace tablespace_name user user_name: 清空指定表空间的Recycle Bin中指定用户的对象
3). Purge recyclebin: 删除当前用户的Recycle Bin中的对象
4). Purge dba_recyclebin: 删除所有用户的Recycle Bin中的对象,该命令要sysdba权限
5). Drop table table_name purge: 删除对象并且不放在Recycle Bin中,即永久的删除,不能用Flashback恢复。
6). Purge index recycle_bin_object_name: 当想释放Recycle bin的空间,又想能恢复表时,可以通过释放该对象的index所占用的空间来缓解空间压

力。 因为索引是可以重建的。

3、Flashback Drop实例操作

SQL> create table emp2 as select * from emp;

表已创建。

SQL> drop table emp2;

表已删除。

SQL> create table emp2 as select * from emp;

表已创建。

SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
EMP2 BIN$I9JlfLrTQY6cwRe8z23JRA==$0 TABLE 2014-10-16:14:27:26
SQL> flashback table emp2 to before drop;
flashback table emp2 to before drop
*
第 1 行出现错误:
ORA-38312: 原始名称已被现有对象使用

SQL> flashback table emp2 to before drop rename to emp2_old;

闪回完成。

SQL> select * from emp2_old;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
……
==============================
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
EMP2 BIN$AeRr13dlQI+5c9f9+0ducA==$0 TABLE 2014-10-16:14:32:02
EMP2 BIN$Zj6I4NMMSwWhib3C/jYx1g==$0 TABLE 2014-10-16:14:31:21
删除emp2,再新建em2,再删除...此时Recycle Bin中就会有多个相同的表名,恢复时必须指定object_name才行。
flashback table emp2 to before drop;-----------没有指定object_name,则恢复最近时间删除的表。
SQL> flashback table emp2 to before drop;

闪回完成。
或flashback table "BIN$Zj6I4NMMSwWhib3C/jYx1g==$0" to before drop;---指定object_time;
SQL> flashback table "BIN$Zj6I4NMMSwWhib3C/jYx1g==$0" to before drop rename to emp3;

闪回完成。

==============================
一旦完成闪回恢复,Recycle Bin中的对象就消失了。
如果表上索引或者约束等信息,这些信息也会被恢复,但是这些对象会使用Oracle 自动的命名。 我们需要查看这些对象,然后对这些对象重新命名。

Flashback Drop 需要注意的地方:
1). 只能用于非系统表空间和本地管理的表空间
2). 对象的参考约束不会被恢复,指向该对象的外键约束需要重建。
3). 对象能否恢复成功,取决与对象空间是否被覆盖重用。
4). 当删除表时,信赖于该表的物化视图也会同时删除,但是由于物化视图并不会被放入recycle bin,因此当你执行flashback table to before drop

时,也不能恢复依赖其的物化视图,需要dba 手工介入重新创建。
5). 对于Recycle Bin中的对象,只支持查询。

《FROM:http://blog.csdn.net/tianlesoftware/article/details/4677378

时间: 2024-08-01 11:46:24

Flashback 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

PLSQL_闪回删除FlashBack Drop表误删除如何进行恢复(案例)

2014-06-25 BaoXinjian 一.摘要 在PLSQL开发时,有时候会遇到对表的误删除,其实遇到这种情况不需要紧张,如果问题较大,请DBA帮忙,如果只是小问题,只需自己处理,利用flashback闪回操作即可,可将表进行恢复 在删除表时,系统一般都是表放入回收站中,并没有完全进行删除,因此,只需从回收站中进行恢复就可以了,原理和Window中的回收站一样,但是一旦将回收站中的资料再进行删除,这个就很难恢复了,只能向DBA求救 1. 回收站的概念 回收站,是一个虚拟的容器,用于存放所有

2.Oracle 闪回特性(FLASHBACK DROP & RECYCLEBIN)

转载自:https://blog.csdn.net/leshami/article/details/6105327 FLASHBACK DROP 特性允许在不丢失任何数据库的情况下将指定的表恢复至其被删除的时间点,并保持数据库为当前状态.闪回删除并不是真正的删除表,而是把该表重命名并放入回收站,类似于Windows的回收站一样.当某个活动对象需要使用该表所占用的空间时,该表才会被真正删除.只要空间未被复用,该表即可恢复.本文主要讲述了FLASHBACK DROP特性以及闪回特性中回收站(RECY

QSqlQueryModel的实例操作

QSqlQueryModel类为SQL的结果集提供了一个只读的数据模型,下面我们先利用这个类进行一个最简单的操作. 我们新建Qt4 Gui Application工程,我这里工程名为queryModel ,然后选中QtSql模块,Base class选QWidget.工程建好后,添加C++ Header File ,命名为database.h,更改其内容如下: 1.           #ifndef DATABASE_H   2.             3.           #defin

[Sqlite]-->嵌入式数据库事务理解以及实例操作

SQLite 事务(Transaction) 事务(Transaction)是一个对数据库执行工作单元.事务(Transaction)是以逻辑顺序完成的工作单位或序列,可以是由用户手动操作完成,也可以是由某种数据库程序自动完成. 事务(Transaction)是指一个或多个更改数据库的扩展.例如,如果您正在创建一个记录或者更新一个记录或者从表中删除一个记录,那么您正在该表上执行事务.重要的是要控制事务以确保数据的完整性和处理数据库错误. 实际上,您可以把许多的 SQLite 查询联合成一组,把所

flashback drop(2015-2-3学习日记)

  知识面是由知识点组成的,你在研究某一个知识点的时候常常会遇到另一个知识点,然后你去研究那个知识点,又会带出更多的知识点,最终组成了知识面. 今天在看书的时候看到一个删除表的语句: DROP TABLE AAA CASCADE CONSTRAINTS PURGE; 平时自己删除表,用的仅仅是DROP TABLE TABLENAME,后边从来没加过这几个参数,感觉好奇就找了几个资料研究了一番. 先说参数 CASCADE CONSTRAINTS 抄袭开始: --------------------

Linux DNS视图脑裂的实例操作(四)

DNS视图 bind view:  视图,脑裂(split-brain)双线接入.如:电信和联通双线接入  根据客户端来源的不同,将同一个名称解析至不同的地址: 案例:我们接下来配置内外网双向解析DNS服务器:同一个名称解析,分配给不同的IP地址 实验条件:我们这里为了方便理解操作直接在服务器上添加了两块网卡,(实际操作中只要能和DNS服务器能通信即可)实际操作如下!! 我们是讲解的方法:方便操作设置以下地址(你懂得.)   实例: 主配置:主配置文件主要设置,把根域复制到辅配置文件中,看配置文

MySQL DROP TABLE操作以及 DROP 大表时的注意事项

语法: 删表 DROP TABLE Syntax DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCADE] 可一次删除一张或多张表.需具有所删除表上的DROP权限. 表定义文件和数据文件均被移除.表被删除后表上的用户权限不会被自己主动删除. 參数里表中指定的表名不存在则报错,但对于存在的表仍会删除.可通过指定IF EXISTS阻止表不存在时引发的错误(此时对于不存在的表仅产生一个NOTE).

iPhone应用开发之自动登陆实例操作

iPhone应用开发之自动登陆实例操作是本文要介绍的内容,主要内容是实现自动登录的实例,不多说,我们来看详细内容. App 里有一个有一个UITabBarController,在进入UITabBarController之前要验证用户是否已经登陆,如果没有登陆就弹出一个对话框,让用户输入登陆信息. 实现方式 1.在appDelegate.h里声明一个变量,用来绑定UITableController: UITabBarController *tabbarController; 2.在appDeleg