概述:

  闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成)。需要注意的是,闪回技术旨在快速恢复逻辑错误,对于物理损坏或是介质丢失的错误,闪回技术就回天乏术了,还是得借助于Oracle一些高级的备份恢复工具如RAMN去完成(这才是Oracle强大备份恢复机制的精髓所在啊)

撤销段(UNDO SEGMENT)

  在讲闪回技术前,需要先了解Oracle中一个逻辑结构--撤销段。因为大部分闪回技术都需要依赖撤销段中的撤销数据。撤销数据是反转DML语句结果所需的信息,只要某个事务修改了数据,那么更新前的原有数据就会被写入一个撤销段。(事务回滚也会用到撤销段中的数据)。事务启动时,Oracle 会为其分配一个撤销段,事务和撤销段存在多对一的关系,即一个事务只能对应一个撤销段,多个事务可以共享一个撤销段(不过在数据库正常运行时一般不会发生这种情况)。

闪回技术

  Oracle提供了四种可供使用的闪回技术(闪回查询,闪回删除,闪回归档,闪回数据库),每种都有不同的底层体系结构支撑,但其实这四种不同的闪回技术部分功能是有重叠的,使用时也需要根据实际场景合理选择最合适的闪回功能。

闪回查询(Flashback Query)

    a.基本闪回查询

    功能描述:可以查询过去某个时间段的数据库状态。

    工作原理:Oracle 会提取所需要的撤销数据(前提是撤销是可用的,即撤销数据还没被覆盖)进行回滚,但这种回滚是临时的,仅针对当前session可见。

    SQL> select * from dept as of timestamp to_timestamp('2016-09-10 11:00:00','yyyy-mm-dd hh24:mi:ss');
    b.闪回表

    功能描述:可将某个表回退到过去某个时间点

    工作原理:同样,Oracle会先去查询撤销段,提取过去某个时间点之后的所有变更,构造反转这些变更的SQL语句进行回退,闪回操作是一个单独的事务,所以若由于撤销数据过期之类的原因导致无法闪回,整个操作会回滚,不会存在不一致的状态。

    步骤:

    1.启用表闪回首先要在表上支持行移动(在数据字典中设置标识来标识该操作可能会改变行ID,即同一条数据闪回成功后主键都一样,但行ID其实已经发生变化了)   

    SQL> alter table emp enable row movement;
    2.闪回表操作      

    SQL> flashback table dept to timestamp to_timestamp('2016-09-10 11:00:00','yyyy-mm-dd hh24:mi:ss');
    闪回表可能会失败,有可能有以下几种情况:

      违反了数据库约束,比如用户不小心删除了子表中的数据,现在想利用闪回表技术进行回退,恰好在这中间,父表中与该数据对应的那条记录也被删除了,在这种情况下,由于违反了外键约束,导致闪回表操作失败了;

      撤销数据失效,比如用于支撑闪回操作的撤销数据被覆盖了,这种情况闪回表操作自然会失败;

      闪回不能跨越DDL,即在闪回点和当前点之间,表结构有过变更,这种情况闪回操作也会失败。

    注意:上述闪回功能都是基于撤销数据的,而撤销数据是会被重写的(Expired会被重写,Active不会被重写),所以,在需要使用这几种闪回功能去恢复数据的时候(确切地说,是需要使用基于撤销数据的闪回功能时),最短时间发现错误,第一时间执行闪回操作,才能最大程度地保证闪回功能的成功。

闪回删除(Flashback Drop)

  功能描述:闪回删除可以轻松将一个已经被Drop的表还原回来。相应的索引,数据库约束也会被还原(除了外键约束)

  原理描述:Drop命令其实是Rename命令,早期的Oracle版本(10g之前),闪回删除意味着从数据字典中删除了该表的所有引用,虽然表中数据可能还存在,但已成了孤魂野鬼,没法进行恢复了,10g版本之后,Drop命令则仅仅是一个Rename操作,所以恢复就很容易了。

  

  闪回删除操作执行命令很简单

    SQL> flashback table emp to before
  如果要还原的表名在当前系统中已经被占用,也可以在闪回删除的时候对表重命名

    SQL> flashback table emp to before drop rename to emp_new
  也可以通过回收站查看当前用户那些表被删除了,每个用户都有一个回收站,这个回收站是个逻辑结构,它不是一块独立的存储空间,它存在在当前表空间内,所以如果有别的操作需要空间,比如现在需要创建一张表,没有足够空间可用,回收站中的数据就会被清理,这也是导致闪回删除失败的原因。

    SQL> SHOW RECYCLEBIN;
  彻底删除表,闪回删除也无能为力

    SQL> DROP TABLE EMP PURGE;
  清空回收站

    SQL> PURGE RECYCLEBIN;
  注意:闪回删除只针对Drop命令,注意区分truncate操作和drop操作,truncate称为表截断,会清空表中数据(调节Oracle高水位线实现),表结构不受影响,速度很快,弊端是此过程不会产生任何撤销数据或是重做日志,如果误删,恢复异常麻烦,要慎重使用。而Drop则会删除数据+表结构,闪回删除仅针对Drop操作。

闪回数据归档(Flashback Data Archive )

   功能描述:闪回数据归档可使表具有回退到过去任何时间点的能力,前面提到的闪回查询,闪回表都会受限于撤销数据是否失效,如果撤销数据被覆盖重写了,闪回操作自然会失败,闪回删除则受限于表空间是否有足够可用空间,而闪回数据归档,则没有这些限制。

   创建闪回归档

   1.创建一个用户闪回数据归档的表空间,当然,也可以使用已经存在的表空间。

    SQL> create tablespace test_tb datafile 'test.dbf' size 20m;
   2.创建一个保留时间为2年的闪回归档

     SQL> create flashback archive test_fa tablespace test_tb retention 2 year;
   

   为scott用户下的emp表启用闪回归档

   1.赋予用户归档的权限

     SQL> grant flashback archive on test_fa to scott;
   2.连接用户

     SQL> conn scott/tiger;
   3.为emp表启用闪回归档

     SQL> alter table emp flashback archive test_fa;
  至此,emp表就拥有了可以查询或回退到过去2年任意时间点的能力!

闪回数据库(Flashback Database)

   功能描述:闪回数据库可将整个数据库回退到过去某个时间点,闪回表是某张表的时空穿梭,闪回数据库则是整个数据库的时空穿梭。当然,闪回点之后的所有工作就丢失了,其实就相当于数据库的不完整恢复,所以只能以resetlogs模式打开数据库。闪回数据库会造成停机时间,当然相比于传统备份恢复机制,恢复过程会快很多。

   工作原理:闪回数据库不使用撤销数据,使用另外一种机制来保留回退所需要的恢复数据,当启用闪回数据库,发生变化的数据块会不断从数据库缓冲区缓存中复制到闪回缓冲区,然后,称为恢复写入器(Recovery Writer)的后台进程会将这些数据刷新到磁盘中的闪回日志文件中。闪回的过程,则是一个 提取闪回日志-->将块映像复制回数据文件 的过程。

   配置闪回数据库(闪回数据库要求数据库为归档模式)

    1.指定闪回恢复区,也就是存放闪回日志的位置,但闪回恢复区不仅仅是为了存放闪回日志,Oracle的很多备份恢复技术都用到这个区域,比如控制文件的自动备份等都会存放到此区域。

   SQL> alter system set db_recovery_file_dest ='/flash_recovery_area';
     2.指定恢复区大小

   SQL> alter system set db_recovery_file_dest_size=4G;
    3.指定闪回日志保留时间为2小时,即通过闪回操作,可以将数据库回退到前两小时内的任意时间点

   SQL> alter system set db_flashback_retention_target=120;
    4.有序关闭数据库--mount模式下启用闪回数据库--打开数据库

复制代码
   SQL> shutdown immediate;

   SQL> startup mount;

   SQL> alter database flashback on;

   SQL> alter database open;
复制代码
  至此,闪回数据库配置完成!

  

   使用闪回数据库功能

复制代码
   SQL> shutdown immediate;

   SQL> startup mount;

   SQL> flashback database to timestamp sysdate-60/1440;

   SQL> alter database open resetlogs;
复制代码
  

总结

  本文列举了四类闪回技术,其中,闪回查询,包括基本闪回查询,闪回表等技术都依赖于撤销数据(还有一类闪回技术为闪回事务,可以对指定事务进行闪回操作,原理类似,借助于撤销数据来构建用于反转事务的SQL语句),依赖于撤销数据,则自然受限于撤销数据的保留时间,可能会由于撤销数据被覆写而导致闪回失败。闪回删除,则是由于10g版本后对表的删除仅表现为一个rename操作,引入回收站的概念,但此回收站仅是当前表空间的一块逻辑划分,所以会受限于当前表空间的可用空间的限制;闪回归档可提供查询或回退到过去任意时间点的功能,闪回数据库则是一中更极端的数据库恢复功能,相当于不完整恢复,依赖于闪回日志。 

以上文章为转载原文:https://www.cnblogs.com/chengxiao/p/5860823.html

转载于:https://www.cnblogs.com/newxiaobai/p/8267822.html

oracle 中的闪回相关推荐

  1. 数据库----Oracle中的闪回(flashback)技术

    目录 前言 正文 Flashback介绍 闪回表数据(Flashback Table) 1.闪回到具体时间点 2. 闪回到10分钟之前 闪回删表(Flashback Drop) 1. 闪回被删掉的sc ...

  2. Oracle 原理: 闪回 flashback

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

  3. Oracle 10g的闪回机制

    第5章Oracle 10g的闪回机制 5.1 简介 在Oracle中,对于提交的变化,是没有办法回退的.所以这时候就可能存在这样一种情况,对于表做了DML操作,并且在提交后才发现,对表的操作是错误的, ...

  4. oracle数据库归档闪回,oracle数据库开归档闪回模式

    10G 归档相关 转:http://blog.163.com/z_rx/blog/static/2763637620077811571555/ 关于Oracle 10g 归档方式的讨论:关闭归档/启用 ...

  5. oracle9i能闪回吗,[转]Oracle 9i的闪回查询概述

    key words: Oracle闪回 flash 1.Oracle 9i的闪回查询功能 在Oracle 9i之前,如果用户错误操作数据后,除了不完全恢复外,没有好的解决办法.Oracle 9i中提供 ...

  6. 如何打开oracle的回闪,Oracle如何开启闪回功能

    Oracle如何开启闪回 Oracle在9i版本的时候引入了闪回技术,在Oracle 10g已经全面提供了闪回功能,主要提供了快速简单恢复数据库误操作的数据的恢复方法,而不用从逻辑备份或物理备份中恢复 ...

  7. oracle之ORA-19815闪回空间爆满问题的处理方法

    闪回区爆满问题也是经常会遇到的问题,最关键的是闪回设置大小以及归档被默认存放在了闪回目录,恰巧今天又遇到了这个问题,就记录下处理步骤,仅供遇到这类问题的人参考. 一.错误现象描述 1)应用端错误信息 ...

  8. oracle中闪回概念,Oracle数据库的闪回操作

    通过DELETE删除数据后相当于放入回收站,一般情况下可以找回:通过UPDATE更新数据后数据库也会保留数据快照.闪回就是恢复指定时间的数据快照以达到恢复数据的目的. 根据步骤一查询出数据快照,恢复数 ...

  9. oracle9i 恢复数据库,oracle 9i使用闪回查询恢复数据库误删问题

    如果用户误删/更新了数据后,作为用户并没有什么直接的方法来进行恢复,他们必须求助DBA来对数据库进行恢复,到了Oracle9i,这一个难堪局面有所改善.Oracle 9i中提供了一项新的技术手段--闪 ...

最新文章

  1. Error detection in Knowledge Graphs: Path Ranking, Embeddings or both?-学习笔记
  2. 表格合并行_合并行table表格
  3. 需做勿畏拖 效能更轻松
  4. KMP算法模板与解析
  5. 通俗演义TCP流量控制
  6. (十七)用JAVA编写MP3解码器——解码Layer1
  7. 【渝粤教育】国家开放大学2018年秋季 1189T政府经济学 参考试题
  8. 不能查看工作组计算机 提示没有权限拒绝访问
  9. php复制目录图片,php实现将base64格式图片保存在指定目录的方法
  10. 前言:电商产品经理必修课-如何打造实战型商品系统
  11. Win10下安装CentOS双系统详解
  12. Android中图片压缩方式总结
  13. modern ui html,非常漂亮的WPF界面框架(Modern UI for WPF)
  14. 机器学习个人资料整理
  15. android10 三星升级计划,三星公布Android 10.0国行升级计划:规模庞大
  16. 天池AI学习全面升级,所有学习资源都给你你汇总好啦!
  17. java 火车票_Java 面向对象 之 接口 火车票实例
  18. 话生态 | F-One联手思凯普,靠谱!
  19. 8核、6核、4核、双核cpu是啥
  20. U盘出问题乱码解决方法

热门文章

  1. bgi::detail::minmaxdist用法的测试程序
  2. boost::describe模块实现overloaded的测试程序
  3. ITK:从文件编写一个转换
  4. ITK:查看矢量图像的分量
  5. ITK:具有写访问权限遍历图像的某个区域
  6. VTK:可视化之CreateColorSeries
  7. QDoc C ++特定的配置变量
  8. C++插入排序(附完整源码)
  9. C++成员变量和成员函数分开存储
  10. 经典C语言程序100例之七五