Flashback Drop 是从Oracle 10g 开始出现的, 用于恢复用户误删除的对象(包括表,索引等), 这个技术依赖于TablespaceRecycle Bin(表空间回收站),这个功能和windows的回收站非常类似。

这个功能和数据库闪回没有关系,和flashback参数没有关系,表也不要求row movement.

经过测试SQL> alter database flashback off 能够闪回drop掉的表.

Flashback 不支持sys用户. system表空间下的对象,也不能从回收站里拿到。故使用SYS 或者SYSTEM用户登陆时, show recyclebin 为空。

1. Tablespace Recycle Bin

从Oracle 10g 开始,每个表空间都会有一个叫作回收站的逻辑区域,当用户执行drop命令时,被删除的表和表的关联对象( 包括索引,约束,触发器,LOB段,LOB index 段) 不会被物理删除,这些对象先转移到回收站中,这就给用户提供了一个恢复的可能。

初始化参数recyclebin 用于控制是否启用recyclebin功能,缺省是ON,可以使用OFF关闭。

SQL> show parameter recycle

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中。

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

1). Purge tablespace tablespace_name : 用于清空表空间的RecycleBin

2). Purge tablespace tablespace_name useruser_name: 清空指定表空间的Recycle Bin中指定用户的对象

3). Purge recyclebin: 删除当前用户的RecycleBin中的对象

4). Purge dba_recyclebin: 删除所有用户的RecycleBin中的对象,该命令要sysdba权限

5). Drop table table_name purge:  删除对象并且不放在Recycle Bin中,即永久的删除,不能用Flashback恢复。

6). Purge index recycle_bin_object_name: 当想释放Recycle bin的空间,又想能恢复表时,可以通过释放该对象的index所占用的空间来缓解空间压力。因为索引是可以重建的。

2. Flashback Drop 实例操作

下面在系统参数recyclebin=on的时候操作:

1,SQL> drop table test1;

Table dropped.

2,查看recyclebin的信息

SQL> col origninal_name format a15;

SQL> col type format a15;

SQL> selectobject_name,original_name,type from user_recyclebin;

OBJECT_NAME                    ORIGINAL_NAME                    TYPE

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

BIN$fR5G/49+SZ2oESrTX4UCHg==$0IDX_TESTID                       INDEX

BIN$x1Ey4hTFSeilywuQ7KKM+w==$0 TEST1                            TABLE

SQL> show recyclebin; --注意这是sqlplus的命令

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME

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

TEST1            BIN$x1Ey4hTFSeilywuQ7KKM+w==$0TABLE        2012-01-13:16:35:24

3,将删除的表闪回

SQL> flashback table test1 to before drop;

Flashback complete.

SQL> select * from test1;

ID NAME

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

3763392 A

如果出现这样的情况,表test1删除后,一个同名的对象test1(表或者procedure..)被创建,闪回的时候需要重新命名

flashback table test1 to before drop renameto testX

还有一种情况是;同名的表被多次drop到了recyclebin中,这时候遵循后进先出的原则.

一旦完成闪回恢复,Recycle Bin中的对象就消失了.

SQL> selectobject_name,original_name,type from user_recyclebin;

no rows selected

在recyclebin被设置为off后不支持flashbacktable drop.

SQL> alter system set recyclebin=off;

System altered.

SQL> drop table test1;

Table dropped.

SQL> selectobject_name,original_name,type from user_recyclebin;

no rows selected

Flashback Drop 需要注意的地方:

1). 只能用于非系统表空间和本地管理的表空间

2). 对象的参考约束不会被恢复,指向该对象的外键约束需要重建。

3). 对象能否恢复成功,取决与对象空间是否被覆盖重用。

4). 当删除表时,信赖于该表的物化视图也会同时删除,但是由于物化视图并不会被放入recycle bin,因此当你执行flashback table to before drop 时,也不能恢复依赖其的物化视图,需要dba手工介入重新创建。

5). 对于Recycle Bin中的对象,只支持查询.

Flashback Table

注意SYS用户不支持闪回,这点前面已经说明过。

Flashback Table也是使用UNDOtablespace的内容来实现对数据的回退。该命令相对简单,输入:flashback table table_name to scn(to timestamp) 即可。

注意:如果想要对表进行flashback,必须允许表的row movement.

Alter table table_name row movement;

要查看某表是否启用row movement,可以到user_tables 中查询(或all_tables,dba_tables),

例如:

SQL> select row_movement fromuser_tables where table_name='TEST1';

ROW_MOVE

--------

DISABLED

这时候为不支持行移动.

SQL> select current_scn from v$database;

CURRENT_SCN

-----------

3769840

SQL> delete from test1;

1 row deleted.

SQL> commit;

Commit complete.

SQL> flashback table test1 to scn  3769840;

flashback table test1 to scn  3769840

*

ERROR at line 1:

ORA-08189: cannot flashback the tablebecause row movement is not enabled

这时候因为不支持行移动,出现上面的错误.

SQL> alter table test1 enable rowmovement;

Table altered.

SQL> flashback table test1 to scn  3769840;

Flashback complete.

SQL> select * from test1;

ID

----------

1

Flashback table 命令支持同时操作多个表,表名中间以逗号分隔即可,如果你执行一条flashback table命令时同时指定了多个表,要记住单个flashback table 是在同一个事务中,因此这些表的恢复操作要么都成功,要么都失败。

如:flashback table a,b ,c to scn 1103864;

基于undo 的表恢复,需要注意DDL 操作的影响

比如 truncate table 后不能flashback table,会发生错误:ORA-01466:unable to read data -table definition has changed.

其他操作包括:drop/modify 列, move 表, drop 分区(如果有的话), truncate table/partition,这些操作会另undo 表空间中的撤销数据失效,对于执行过这些操作的表应用flashback query 会触发ORA-01466 错误。另外一些表结构修改语句虽然并不会影响到undo 表空间中的撤销记录,但有可能因表结构修改导致undo 中重做记录无法应用的情况,比如对于增加了约束,而flashback query 查询出的undo 记录已经不符合新建的约束条件,这个时候直接恢复显然不可能成功,你要么暂时disable 约束,要么通过适当逻辑,对要恢复的数据进行处理之后,再执行恢复。

另外,flashback query 对v$tables,x$tables 等动态性能视图无效,不过对于dba_*,all_*,user_*等数据字典是有效的。同时该特性也完全支持访问远端数据库,比如select * from tbl@dblink as of scn 360;的形式。

2. 基于undo 的表恢复,flashbacktable 实际上做的也是dml 操作(会在被操作的表上加dml 锁),因此还需要注意triggers 对其的影响,默认情况下,flashback table to scn/timestamp 在执行时会自动disable 掉与其操作表相差的triggers,如果你希望在此期间trigger能够继续发挥做用,可以在flashback table 后附加

flashback(二)相关推荐

  1. oracle 的 flash back,Oracle Flashback(二)

    闪回版本查询(Flashback Version Query)查询指定时间点的所有数据, 步骤是记录当前SCN及时间,然后进行DML操作,提交后使用timestamp或SCN进行对DML操作之前的数据 ...

  2. 2020 Pwn2Own东京大赛落幕,Master of Pwn 诞生

     聚焦源代码安全,网罗国内外最新资讯! 为期三天的2020年Pwn2Own东京大赛(线上)已完赛,Master of Pwn 破解之王桂冠由 Team FLASHBACK 摘得.大赛共为6种不同设备的 ...

  3. [每日一题] 11gOCP 1z0-053 :2013-09-29 Flashback Data Archive ...................................6...

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12205299 正确答案:A 具体请参考:http://blog.csdn.net/guoy ...

  4. Oracle Flashback Database and Restore Points 说明

    一.FlashbackDatabase 和 Restore Points 说明 官网的链接如下: http://download.oracle.com/docs/cd/E18283_01/backup ...

  5. RMAN 系列(二) ---- RMAN 设置和配置

    一. 配置数据库以ARCHIVELOG 模式运行 在ORACLE 10g 之前,在将数据库置入Archivelog 模式后,需要启动arch进程. 设置参数LOG_ARCHIVE_START 为tru ...

  6. FLASHBACK实施笔记

     一.启用FLASHBACK 1.更改参数(在6节点执行如下脚本) shutdown immediate; startup mount; alter system set db_recovery_fi ...

  7. oracle数据误操作恢复【flashback闪回操作】

    几张表的数据全部执行了delete * 操作. 接到问题立刻知道了事件的严重性,立即开始研究解决办法. 了解到数据库是oracle 10G. 经查询可以使用flashback闪回操作进行恢复,这下放心 ...

  8. Oracle 原理: 闪回 flashback

    目录 一.9i中的闪回查询方法 二.10g的闪回版本查询方法 三.10g闪回事物查询方法和恢复数据 四.10g闪回表 五.10g闪回删除 六.10g闪回数据库 一.9i中的闪回查询方法 可以按照时间点 ...

  9. Flashback Data Archive(转)

    自己一直希望找到一篇关于将一个表的一列不小心删除了,怎么来修复,可是一直找不到,自己最近看到一篇在oracle11的一篇文章,特意在这里转一下,没有试过,因为自己的是10,如果那个网友有在10下实现的 ...

最新文章

  1. Scrapy框架中管道的使用
  2. Integer to Roman 问题
  3. 【迁移学习(Transfer L)全面指南】基于迁移学习完成图像分类任务(Pytorch)
  4. Python解析json字符串,json字符串用法
  5. [BZOJ 2054]疯狂的馒头
  6. aspnetcore源码学习(一)
  7. python代码自动生成器下载_Python代码生成器
  8. cordova与android通信_5:Cordova与原生交互--传值
  9. 智能一代云平台(十九):选修课---类似秒杀的高并发业务
  10. 基于java的线上购物系统的设计与实现_基于javaweb的在线购物系统的设计与实现...
  11. python使用梯度下降方法实现线性回归算法_python实现线性回归梯度下降算法
  12. 关于CREO图纸导出到CAD后尺寸不对的问题
  13. 浅谈ACL在校园网中的应用
  14. 免费学python的网课-像玩游戏一样学Python,和各种网课说再见
  15. 用 8550 和 ULN2003 驱动小型直流电机正反转
  16. Flink基础系列7-通过Web UI执行jar文件
  17. 28181协议、设备配置装维、测试(海康网络摄像机)
  18. Spring Security + OAuth2.0
  19. 【20210825】【数据分析】两个向量做相关性分析时,需不需要统一量纲?
  20. 重庆网络公司的几种死法

热门文章

  1. 【吊打面试官】计算机基础知识
  2. 设计模式(三)策略模式——在Spring中使用策略模式
  3. 图文讲解安装Adobe Photoshop 2021 for Mac(附下载dmg安装包)
  4. java jtextarea 监听文本_Java Swing JTextArea文本区域的实现示例
  5. ffmpeg运行在服务器上,如何在脱离流媒体服务器的时候使用ffmpeg 监测.m3u8直播视频流的状态?...
  6. 数组元素循环左移n个位置(JAVA)
  7. 数学建模 | MATLAB学习 | 插值 一维插值函数、三次样条插值
  8. python中的self
  9. YOLOv3目标检测算法——通俗易懂的解析
  10. iphone html 手机震动,​苹果手机震动器在哪里?如何设置与关闭?