-------------------------与其他数据库相比,Oracle的闪回让开发者多了一条选择的路。

Flashback的目的

先看下Oracle官方文档中的解释
Oracle Flashback Technology is a group of Oracle Database features that that let you view past states of database objects or to return database objects to a previous state without using point-in-time media recovery. 
即:Oracle Flashback是一组Oracle数据库特性,闪回允许你查看过去一个时间数据库对象的状态,或者不借助数据库恢复,就可以恢复数据库对象到之前的一个时间状态。
比如:如果你对数据误操作,而且已提交,这时想回退该误操作,将会是很件麻烦的事情。有人可能会说可以用备份恢复到误操作之前,但那样的话,之前所做的其他正确的操作数据也就一起没了,而Flashback技术就可以帮助你快速的恢复误操作。

需要注意的是Flashback主要是用来解决数据错误,或是用户的一些误操作,对于介质损坏,任何闪回技术都是无能为力的,此时我们只能使用标准的还原、恢复过程。

Flashback技术都包括哪些
  • Flashback Query (引入自Oracle 9i)
  • Flashback Table (引入自 Oracle 10g)
  • Flashback Drop (引入自 Oracle 10g)
  • Flashback Version Query (引入自Oracle 10g)
  • Flashback Transaction Query (引入自Oracle 10g)
  • Flashback Database (引入自Oracle 10g)
  • Flashback Data Archive (引入自Oracle 11g)
  • Flashback Transaction (引入自Oracle 11g)
闪回技术通常用于快速简单恢复数据库中出现的认为误操作等逻辑错误,从闪回的方式可以分为基于数据库级别闪回、表级别闪回、事务级别闪回。


Flashback Query useful to view the data at a point-in-time in the past. This can be used (only) to view and reconstruct lost data that was deleted or changed by accident.



Flashback Table useful to recover a table to a point-in-time in the past without restoring a backup. Flashback Table is a push button solution to restore the contents of a table to a given point-in-time. An application on top of
Flashback Query can achieve this, but with less efficiency.



Flashback Drop provides a way to restore accidentally dropped tables. This will be done with the help of Recyclebin feature.



Flashback Version Query uses undo data stored in the database to view the changes to one or more rows along with all the metadata of the changes.



Flashback Transaction Query useful to examine changes to the database at the transaction level. As a result, we can diagnose problems, perform analysis and audit transactions.



Flashback Database useful to bring database to a prior point in time by undoing all the changes that have taken place since that time. This operation is fast, because we do not need to restore the backups. This in turn results
in much less downtime following data corruption or human error. Flashback Database applies to the entire database. It requires configuration and resources, but it provides a fast alternative to performing incomplete database recovery.



Flashback Data Archive - from Oracle 11g, flashback will make use of flashback logs, explicitly created for that table, in FRA (Flash/Fast Recovery Area), will not use undo. Flashback data archives can be defined on any table/tablespace.
Flashback data archives are written by a dedicated background process called FBDA so there is less impact on performance. Can be purged at regular intervals automatically.

Flashback技术演进的历史

Flashback Query
Oracle Flashback Query是指针对特定的表来查询特定的时间段内的数据变化情况来确定是否将表闪回到某一个特定的时刻以保证数据无讹误存在。这个特性大大的减少了采用时点恢复所需的工作量以及数据库脱机的时间。
一个列子,DBA误删了某业务表,事后突然意识到了,那么如何快速的确认&恢复呢
SQL> alter session set nls_date_format='yyyy-mm-dd:hh24:mi:ss';
Session altered SQL> select * from scott.emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 1980/12/17 800.00 20
7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981/4/2 2975.00 20
7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987/5/23 1100.00 20
7900 JAMES CLERK 7698 1981/12/3 950.00 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
14 rows selected SQL> create table test1 as (select * from scott.emp);
Table created SQL> select sysdate from dual;
SYSDATE
-----------
2015/7/19 15:22:17 --这里DBA误操作,误删除了test1业务表,并且执行了commit
SQL> delete from test1;
14 rows deleted SQL> commit;
Commit complete
此时test1表中已经没有数据了
SQL> select * from test1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------ SQL>
但我们依然可以通过Flashback Query查询之前被删除的数据:
SQL> select * from test1 as of timestamp to_timestamp('2015-07-19:15:22:17','yyyy-mm-dd:hh24:mi:ss');
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 1980/12/17 800.00 20
7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981/4/2 2975.00 20
7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987/5/23 1100.00 20
7900 JAMES CLERK 7698 1981/12/3 950.00 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
14 rows selected SQL>
如果需要,还可以恢复数据:
SQL> insert into test1 select * from test1 as of timestamp to_timestamp('2015-07-19:15:22:17','yyyy-mm-dd:hh24:mi:ss');
14 rows inserted SQL> commit;
上边这个例子是通过时间戳来查看历史记录,Flashback Query还可以通过SCN的方式查询历史记录,可以参考Oracle Flashback Query中的例子。

Flashback Database
Flashback Database,数据库级别的恢复,可以将整个数据库恢复到指定的时间点。

数据库级别的恢复,大家首先会想到的方式可能是借助备份,没错!在10g之前进行全库恢复只能借助备份进行(不管是逻辑备份还是物理备份,反正都得先有备份,才能进行恢复)。那么10g中推出的Flashback Database特性用来做恢复,相比常规的备份方式有哪些优势呢?主要有两点:速度和恢复方式。

常规的恢复方式须借助"备份+归档"

当前数据库SCN为2000,要将数据库恢复到2000之前的状态,如SCN 1850,就必须有在指定时间点前创建的备份。如果没有适当的备份,我们想依靠SCN 2000时的归档和数据文件,是不可能将数据库恢复到SCN 1850时的状态的。 



而借助Flashback Database特性,可以进行这样的恢复

从启用Flashback Database的那刻到当前时间,借助Flashback Database,我们可以将数据库直接修复到这中间的任意时间点,比如直接将数据库Flashback至SCN 1850。当然,实际上我们还是借助了备份的,只不过没有了恢复数据文件的过程,因此才会表现得如此快速。

操作原理:数据库不可能平白无故拥有这样的功能,Oracle为了实现Flashback Database特性,另外引入了一组新的日志文件:Flashback Logs。我们知道Oracle数据库中有Online Redologs、Standby Redologs及Archived Redologs,被统称为重做日志,这几类日志文件都是用来记录Oracle数据库所做的操作,那么Flashback Logs又是何方高人?起什么作用?又以什么形式表现的呢,请听下回……啊别打别打,俺马上就说。


其实Flashback Logs并不神秘,与所有的日志文件功能相同,它也是用来记录日志。只不过这个日志保存的信息比较特别,并不简单记录做过什么的操作,而是记录下操作执行前要修改的数据,即数据块的前映像。这些信息被写入一个专用存储区叫Flash Recovery Area,简称FRA。当需要Flashback Database时,通过Flashback Log中保存的数据,就可以快速将Oracle数据库恢复到指定时间点块的状态,然后再通过应用重做日志,将数据库恢复到一致性状态。



Flashback Log的创建、删除、修改都由Oracle自动进行,完全无须DBA手工干预,唯一需要DBA介入的,就是给Flash Recovery Area分配适当的空间。



参考
《涂抹Oracle》

版权声明:本文为博主原创文章,未经博主允许不得转载。

Oracle Flashback Technology【闪回技术】的更多相关文章

  1. Oracle Flashback Technologies - 闪回查询

    Oracle Flashback Technologies - 闪回查询 查看表中,某行数据的修改记录 #创建一个表,并插入和修改数据 SQL> create table y3(id )); T ...

  2. Oracle Flashback Technologies - 闪回被drop的表

    Oracle Flashback Technologies - 闪回被drop的表 在oracle10g中,drop一个表后,表没有真正被删除,支持被rename后放在recyclebin中. #新建 ...

  3. Oracle Flashback Technologies - 闪回数据库

    Oracle Flashback Technologies - 闪回数据库 根据指定的SCN,使用rman闪回数据库 #查看可以闪回到多久前 SQL> select * from v$flash ...

  4. oracle 基础(一)--闪回技术

    一,闪回表初探 闪回须知: 1 使用闪回表注意如下事项: 2 3 (1)被闪回的表必须启用行移动功能 4 5 SQL> alter table dept enable row movement; ...

  5. 吴裕雄--天生自然ORACLE数据库学习笔记:Oracle 11g的闪回技术

    alter system set db_recovery_file_dest_size=4g scope=both; connect system/1qaz2wsx as sysdba; archiv ...

  6. Oracle 六闪回技术,flashback

    Flashback 技术基于Undo segment基于内容的, 因此,限制UNDO_RETENTON参数. 要使用flashback 特征,您必须启用自己主动撤销管理表空间. 在Oracle 11g ...

  7. Oracle闪回技术(Flashback)

    闪回技术有闪回表.闪回删除.闪回查询.闪回事务查询.闪回事务.闪回数据库.闪回数据归档.其中,闪回查询.闪回事务查询用来“观察”过去:闪回数据归档并不是一个独立的功能,其功能是扩展闪回查询的时间窗口: ...

  8. Oracle 的闪回技术 --flashback

    SQL Fundamentals: 表的创建和管理 如何开启数据库闪回? SQL> shutdown immediate; ORA-01109: database not open Databa ...

  9. Oracle闪回技术详解

     概述: 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成).需要注意的是,闪回技术旨在快速 ...

随机推荐

  1. Storm 01之 Storm基本概念及第一个demo

    2.1 Storm基本概念 在运行一个Storm任务之前,需要了解一些概念: Topologies :[tə'pɑ:lədʒɪ]拓扑结构 Streams Spouts:[spaʊt]喷出; 喷射; 滔 ...

  2. for循环的一个注意点

    unsigned int i =10; for(i;i > 0; i--) { xxxxx } 因为i是unsigned int 类型的,永远不可能小于0,也就是说是个死循环了.

  3. How Many Boyfriends

    知乎上看到一个问题,如果一个女人说自己集齐了12个星座的男朋友,那么她已经搞过多少男人了. 先考虑这个问题的最简单版本,如果说该女人每一次和12个星座的男人交往的概率相同. 考虑$dp$ 注意到这个问 ...

  4. 关于checkbox对应一张表时如何遍历

    html代码: <table> <tr> <td><input name='one' type='checkbox' value='1'/></t ...

  5. Python死锁与递归锁

    Lock() 互斥锁会导致死锁,用RLock()递归锁代替. 递归锁:可以连续acquire多次,每acquire一次计数器+1(无论acquire的是哪个锁),只有计数为0才能被acquire mu ...

  6. 常用的网站站长SEO工具

    网站管理员工具 网站管理员工具需要对网站域名所有权进行验证,通常是通过上传指定文件.增加META或者修改网站DNS来验证管理员身份,通过验证后,网站管理员可以查询到自己网站的各类统计信息. 1. Go ...

  7. MFC——ComBox用法大全

    Combo Box (组合框)控件很简单,可以节省空间.从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的.用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本 ...

  8. java日期时间处理集合

    本文主要介绍java中日期时间的处理,包括获取时间,时间相加减,格式化等操作. 持续更新中... 时间格式化 //时间格式化 SimpleDateFormat dateFormat = new Sim ...

  9. 要单独拿出来讲的a标签

    a标签的属性 href属性赐予a标签力量:href属性指定要通过a标签借助浏览器请求的资源,可以是图片.视屏.网站.音频等.不加herf属性的a标签就是一个没有任何特殊样式和功能的文本容器. targ ...

  10. 执行gulp build报错

    问题与分析 在执行gulp build报错如下: D:\coding\Resume\Resumes>gulp build gulp build[5628]: src\node_contextif ...