基本判断出要恢复误操作的dml的时间可以使用如下的方法进行数据的恢复:

example:

  一、创建test表

  -------create table flashback_asof------

  

  create table flashback_of(
    id varchar2(5) primary key,
    name varchar2(20),
    desc1 varchar2(20),
    desc2 varchar2(20)

  );

  二、insert值

  

  ------insert values-----
  insert into flashback_of values('01','name1','desc11','desc21');
  insert into flashback_of values('02','name2','desc12','desc22');
  insert into flashback_of values('03','name3','desc13','desc23');
  insert into flashback_of values('04','name4','desc14','desc24');

  三、获得当前日期下对应的scn值

  1、select to_char(sysdate,'yyyy-mm-dd hh24;mi:ss') time ,to_char(dbms_flashback.get_system_change_number) scn from dual;

  获取当前日期下对应的scn码。

  2、另外可以通过数据字典v$database中的 current_scn获得当前的scn码

  select name,current_scn from v$database;

  注:

  scn是oracle数据库系统提供的标识时间和系统改变码之间的一种映射关系(sys.smon_scn_time)。在10g中,系统平均每3秒产生一次系统时间与SCN的匹配并存入     SYS.SMON_SCN_ TIME表。因此10g版本如果使用AS OF TIMESTAMP查询UNDO中的数据,实际获取的数据是以指定的时间对应的SCN时的数据为基准。

  使用scn查询更加准确,因为scn对应的timestamp是时间的一个区间,scn对应一段区间值,并且在低版本 中timestamp和scn的值是每隔5分钟才真正映射到           smon_scn_time表中的,所以在闪回查询中尽量使用基于scn的闪回查询。

  使用SCN查询会比TIMESTAMP更加精确,事实上,即使执行Flashback Query时指定的是AS OF TIMESTAMP,Oracle也会将其转换成SCN,这是由于Oracle内部都是通   过SCN来标记操作而不是时间。

  select to_char(time_dp,'yyyy-mm-dd hh24:mi:ss') time,scn from smon_scn_time;

  查看时间和scn的对应关系。

  要查询指定范围的时间和scn的的映射关系可以使用函数timestamp_to_scn();或者scn_to_timestamp()函数

  select timestamp_to_scn(sysdate-30/1440) from dual;----查询半小时之前的scn码

  select scn_to_timestamp(80337709) from dual;-----查询指定scn码对应的timestamp

  四、修改数据值(dml误操作)

  update flashback_of set desc1='update1' ,desc2='update1' where id='01';

  commit;

  五、获得dml误操作之前指定的scn的全部数据值

  

    -----------------get before update---------------

   select * from flashback_of as of scn 80336359;

  六、获得误操作之前的记录保存到指定表中待处理

  

  ------------get original values  for dml opertations---------
  create table destination_table
    as select * from flashback_of as of scn 80336359;

  注:

  1、在确定了要闪回的大致时间以后可以使用如下sql确定scn

  select timestamp_to_scn(sysdate-30/1440) from dual;---获取半小时之前的scn码

  select * from tablename as of scn scn_value;------获得指定表在半小时之前的记录快照

  实现根据要闪回的大致时间获得要恢复的数据。

  2、避免直接使用 as of timestamp的方式获得闪回数据(timestamp的方式较scn不是非常的准确)

  最好是根据timestamp获得scn,然后利用scn直接获得目标闪回数据。

  

推荐使用scn,由于oracle9i中,因为scn与时间点的同步需要5分钟,如果最近5分钟之内的数据需要Falshback query查询,可能会查询丢失,而scn则不存在这个问题。Oracle10g中这个问题已修正(scn与时间点的大致关系,可以通过logmnr分析归档日志获得)。

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 scott;

  

  

已知要闪回的大致时间使用基于as of scn的闪回查询的更多相关文章

  1. O(1)时间删除链表的已知结点

    这题并不需要从头结点遍历到已知结点,只需要知道已知结点,将改结点下一个结点赋值给它,再删除这个下一个结点就行,其中还需要考虑各种情况. 1)链表为空或者已知结点为空 2)链表只有一个结点,这个结点就是 ...

  2. WCF 已知类型和泛型解析程序 KnownType

    数据协定继承 已知类型和泛型解析程序 Juval Lowy 下载代码示例 自首次发布以来,Windows Communication Foundation (WCF) 开发人员便必须处理数据协定继承方 ...

  3. WP8.1开发者预览版本号已知 Bug

    偶的 Lumia 920 已经升级到最新的 8.1 开发者预览版本号,使用中没有发现什么问题. 可能是由于偶玩手机的情况比較少吧!忽然看到 MS 停止此版本号的更新,并说明有非常多的 BUG,偶就郁闷 ...

  4. Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄(转)

    用我的方法来控制其他程序窗体上的窗口控件,必须先了解什么是 回调函数.我的理解是这样的: 回 调函数写出来不是自己的程序去调用的,反而是让其他的东西去调用,比如windows操作系统,比如其他的程序等 ...

  5. HoloLens开发手记 - Known issues 已知问题

    本文主要提及一份问题清单,这些问题都可能对我们开发HoloLens应用造成困扰. Visual Studio 在使用VS 2015 Update 1连接HoloLens时,可能会有些小问题.但是这些小 ...

  6. C#在父窗口中调用子窗口的过程(无法访问已释放的对象)异常,不存在从对象类型System.Windows.Forms.DateTimePicker到已知的托管提供程序本机类型的映射。

    一:C#在父窗口中调用子窗口的过程(无法访问已释放的对象)异常 其实,这个问题与C#的垃圾回收有关.垃圾回收器管 理所有的托管对象,所有需要托管数据的.NET语言(包括 C#)都受运行库的 垃圾回收器 ...

  7. 已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)

    1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列 ...

  8. 实战分享:如何成功防护1.2T国内已知最大流量DDoS攻击

    作者:腾讯云宙斯盾安全团队&腾讯安全平台部 引言: DDoS攻击势头愈演愈烈,除了攻击手法的多样化发展之外,最直接的还是攻击流量的成倍增长.3月份国内的最大规模DDoS攻击纪录还停留在数百G规 ...

  9. Confluence 6 指定日志选项和已知问题

    指定 Confluence 日志选项 这里是一些特定的日志配置,你可能在对问题进行调试的时候需要. 在日志中记录数据库使用的 SQL 查询请求 你可能希望增加日志的中的内容,记录 Confluence ...

随机推荐

  1. C语言enum再学习

    通常来说我们使用enum是这样的: enum week{ Mon, Tue, ... Sun }; enum week w; w = Mon; 这里默认Mon~Sun的值为0~6 也可以自己定值 , ...

  2. linux相关小工具的使用(一)————代码相关工具

    在linux环境下,对于程序员来说,知道使用一些好用的小工具,对源代码的阅读.编译和调试都有着事半功倍的效果,这里我也是边学边写的原则,把自己知道的一丁点小知识分享给大家. 一.  源代码的阅读 首先 ...

  3. C++程序设计实践指导1.10二维数组元素换位改写要求实现

    改写要求1:改写为以单链表和双向链表存储二维数组 改写要求2:添加函数SingleLinkProcess()实现互换单链表中最大结点和头结点位置,最小结点和尾结点位置 改写要求3:添加函数Double ...

  4. java实现web文件无刷新上传

    最近在做如何实现文件上传的相关工作,查阅了很多资料,发现网上写的都不是很直观,且调试复杂,经实验成功. 把form的target设为页面里一个看不见的iframe,这样上传时候就不会刷新页面了,比如 ...

  5. jQuery.extend函数详细用法!

    最近在研究jQuery.把jQuery.extend扩展函数的用法记录下来. 1.扩展jQuery静态方法. }) 用法: $.test() 2.合并多个对象.为jQuery.extend(css1, ...

  6. [Head First Python]4. pickle.dump pickle.load

    sketch.py #--*-- coding:utf-8 --*-- import pickle import nester man = [] other = [] try: data = open ...

  7. Ubunu下安装mongoDB

    mongoDB有两种安装模式: 1. 源码安装 wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.2.0.tgz tar zxvf ...

  8. python 在linux下通过top,和dh命令获得cpu,内存,以及硬盘信息

    主要是通过os.popen读取命令输出实现的,os.popen启动新的进程,且将外部命令的输出作为文件类型对象返回.不能获得外部命令的返回值.既然是文件对象就可以直接用for in 来读取,代码如下: ...

  9. linux io优化

    场景:xml文件解析入库:并备份 问题:磁盘io异常,经常100%busy: linux io优化方法: 1.修改磁盘挂着参数,修改为writeback模式:对于文件读取频繁的可以设置noatime: ...

  10. mysqlbackup

    mysqlbackup 使用学习 1.设置数据库用户的相关权限 '; grant reload,replication client,super,process on *.* to backupuse ...