Flashback query(闪回查询)原理

Oracle根据undo信息,利用undo数据,类似一致性读取方法,可以把表置于一个删除前的时间点(或SCN),从而将数据找回。

Flashback query(闪回查询)前提

SQL> show parameter undo;

其中undo_management = auto,设置自动undo管理(AUM),该参数默认设置为:auto;
Undo_retention = n(秒),设置决定undo最多的保存时间,其值越大,就需要越多的undo表空间的支持。

修改undo_retention的命令如下:
SQL> alter system set undo_retention = 3600;

操作步骤:
1:获取数据删除前的一个时间点或scn

--获取一个时间点
SELECT to_timestamp('2013-08-16 09:40:00','yyyy-MM-dd hh24:mi:ss') AS TIMESTAMP FROM DUAL;
--获取scn
SELECT TO_CHAR(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) SCN FROM DUAL;

2:查询该时间点(或scn)的数据

--通过时间点查询已删除的数据
SELECT * FROM T_FLASHBACK AS OF TIMESTAMP TO_TIMESTAMP('2013-08-16 09:40:00','yyyy-MM-dd hh24:mi:ss')
--通过scn查询已删除数据
SELECT * FROM T_FLASHBACK AS OF SCN +步骤1中获得的scn

3:将查询出来的数据插入回原来的表

INSERT INTO T_FLASHBACK  SELECT * FROM T_FLASHBACK AS OF TIMESTAMP TO_TIMESTAMP('2013-08-16 09:40:00','yyyy-MM-dd hh24:mi:ss')

INSERT INTO T_FLASHBACK  SELECT * FROM T_FLASHBACK AS OF SCN +步骤1中获得的scn

示例:

--新建一个表用于测试
CREATE TABLE T_FLASHBACK(
  ID  NUMBER(2)
)

--插入测试数据
INSERT INTO T_FLASHBACK(ID) VALUES (1);
INSERT INTO T_FLASHBACK(ID) VALUES (2);
INSERT INTO T_FLASHBACK(ID) VALUES (3);
INSERT INTO T_FLASHBACK(ID) VALUES (4);
INSERT INTO T_FLASHBACK(ID) VALUES (5);

--查看测试数据
SELECT * FROM T_FLASHBACK;

--删除数据(并提交commite)
DELETE FROM  T_FLASHBACK;

--再次查看数据
SELECT * FROM T_FLASHBACK;


--查找未删除数据前某个时间点或SCN
SELECT to_timestamp('2013-08-16 09:40:00','yyyy-MM-dd hh24:mi:ss') AS TIMESTAMP FROM DUAL;
SELECT TO_CHAR(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) SCN FROM DUAL WHERE ; --14677482

--根据这个SCN(或时间点)查找出已删除的数据
SELECT * FROM T_FLASHBACK AS OF SCN 14677482;


--把已删除的数据重新插回到原来的表(并提交)
INSERT INTO T_FLASHBACK SELECT * FROM T_FLASHBACK AS OF SCN 14677482;

--查看操作结果
SELECT * FROM T_FLASHBACK;

Falshback query查询的局限:

1. 不能Falshback到5天以前的数据。
2. 闪回查询无法恢复到表结构改变之前,因为闪回查询使用的是当前的数据字典。
3. 受到undo_retention参数的影响,对于undo_retention之前的数据,Flashback不保证能Flashback成功。
4. 对drop,truncate等不记录回滚的操作,不能恢复。
5. 普通用户使用dbms_flashback包,必须通过管理员授权。命令如下:
SQL>grant execute on dbms_flashback to orcl(拥有当前表的用户);

利用flashBack恢复误删除(delete)的表数据的更多相关文章

  1. ORACLE 利用SCN恢复误delete的表

    --kg是误删除的表 SQL> select count(*) from kg;   COUNT(*) ----------     820861 SQL> delete from kg; ...

  2. 利用FinalData恢复shift+delete误删的文件

    当前位置 : 首页 » 文章分类 :  生活  »  利用FinalData恢复shift+delete误删的文件 上一篇 有关可变形部件模型(Deformable Part Model)的一些说明 ...

  3. Linux中利用extundelete恢复误删除的数据

    利用extundelete工具恢复磁盘误删除的数据 原理: 简单介绍下关于inode的知识.在Linux下可以通过"ls -id"命令来查看某个文件或者目录的inode值,例如查看 ...

  4. ORACLE恢复误删除的对象(表、存储过程等)

    1.恢复存储过程 原理就是利用了oracle里所有的存储过程的源代码都是存在dba_source里,而drop某个存储过程的时候,oracle这里肯定要去dba_source里把相关的源代码给dele ...

  5. 针对mysql delete删除表数据后占用空间不变小的问题

    开发环境 Yii1版本 MySQL PHP5.6.27 前言 物流规则匹配日志表记录订单匹配规则相关日志信息,方便管理员维护和查阅不匹配的订单,四个月时间,该日志表数据就有174G,当前,这么大的数据 ...

  6. 一句DELETE引发的加班(Mysql 恢复Delete删除的数据)

    本机用的Navicat连mysql测试DB又连了正式DB,因为本地与正式要频繁操作所以都打开了很多查询,本来要DELETE删除测试DB的数据,没看清在正式环境执行了.共删除了325条数据,然后在网上找 ...

  7. window下Mysql 恢复Delete删除的数据

    转载:https://www.cnblogs.com/q149072205/p/11940591.html 本机用的Navicat连mysql测试DB又连了正式DB,因为本地与正式要频繁操作所以都打开 ...

  8. 利用flashback query 恢复表数据

    flashback query可以查询过去某个时间点对象的状态,从而可以利用此来进行恢复数据 1 准备测试数据 用普通用户创建一个表,表中插入部分数据: SQL> show user USER ...

  9. 利用logminer恢复delete误删除操作的数据

    1环境准备 日志挖掘可以基于日志.基于时间.基于SCN分析,这里我们将演示一个基于SCN的分析案例. 开启补充日志功能(必须开始,否则不能捕获DML操作日志): 创建一张livan表,往里面插入了14 ...

随机推荐

  1. Organic Solar Cells - Generations of Solar Cells

    Sunlight --> Electricity A. E. Becquerel, 1839 . He stated that we can get energy from sunlight. ...

  2. kivy Create an application

    http://kivy.org/docs/guide/basic.html#quickstart I followed this tutorial about how to create basic ...

  3. C#实现eval

    C#实现eval 进行四则运算(有码)   在JavaScript中实现四则运算很简单,只需要调用eval函数就行了,但是不知道什么原因万能的.NET却没有封装这个函数~ 在这里为大家封装了一个C#版 ...

  4. ajax简单后台交互

    ajax简单后台交互 1,扯淡 单身的生活,大部分时间享受自由,小部分时间忍受寂寞. 生活有时候,其实蛮苦涩,让人难以下咽.那些用岁月积累起来的苦闷,无处宣泄,在自己的脑海里蔓延成一片片荆棘,让你每每 ...

  5. Kendo UI开发教程(6): Kendo DataSource 概述

    Kendo 的数据源支持本地数据源(JavaScript 对象数组),或者远程数据源(XML, JSON, JSONP),支持CRUD操作(创建,读取,更新和删除操作),并支持排序,分页,过滤,分组和 ...

  6. NSLocalizedString不起作用

    程序TESTAPP 环境:XCODE 4.6 OSX  10.8.4 MAC BOOK AIR 2011年版 代码 [doneButton setTitle:NSLocalizedString(@&q ...

  7. 用indexOf获取字符窜某个字符的所有位置

    indexOf方法可以传两个参数,第二个参数是传位置的参数,利用这点获取所有的位置.例如: var str = "hello world,welcome!"; var arr = ...

  8. Java项目中打开本地文件的方法

    1:其中saveAddress 为已知本地文件全路径: Desktop.getDesktop().open(new File(saveAddress));

  9. 对 Select 的各种操作(JQuery)

    在写表单时,经常要用到select元素,这个元素相较于其他文本框标签而言有不同.最近在写一个页面表单时需要对select进行各种操作,现将其用法收集并总结如下: HTML元素: <select ...

  10. .NET基础——基本概念

    1.   .NET.C#(sharp)和JAVA .net是一种多语言的平台,开发.net可以用多达几十种语言进行开发. C#(sharp)是一种编程语言,可开发基于.net平台的应用. Java既是 ...