Flashback Query
Flashback 是ORACLE 自9i 就开始提供的一项特性,在9i 中利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错误数据,该项特性也被称为Flashback Query。
Flashback Query分Flashback Query,Flashback Version Query, Flashback Transaction Query 三种。

Flashback Query
Flashback Query 是利用多版本读一致性的特性从UNDO 表空间读取操作前的记录数据。
flashback query 对v$tables,x$tables 等动态性能视图无效,不过对于dba_*,all_*,user_*等数据字典是有效的。
该特性也完全支持访问远端数据库,比如select * from tbl@dblink as of scn 3600;的形式。
多版本读一致性
不同的事务在写数据时,会将数据的前映像写入undo 表空间,这样如果同时有其它事务查询该表数据,则可以通过undo 表空间中数据的前映像来构造所需的完整记录集,而不需要等待写入的事务提交或回滚。
Flashback query 有多种方式构建查询记录集,记录集的选择范围可以基于时间或基于scn,甚至可以同时查询出记录在undo 表空间中不同事务时的前映象。用法与标准查询非常类似,要通过flashback query 查询undo 中的撤销数据,最简单的方式只需要在标准查询语句的表名后面跟上as of timestamp(基于时间)或as of scn(基于scn)即可。
as of timestamp|scn 的语法是自9iR2 后才开始提供支持。
=====================AS OF TIMESTAMP 示例========================

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
-------------------
2014-10-16 15:13:06 SQL> DELETE FROM EMP2; 已删除14行。 SQL> SELECT * FROM EMP2 AS OF TIMESTAMP TO_TIMESTAMP('2014-10-16 15:13:06','YYYY-MM-DD HH24:MI:SS'); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
……

查看删除之前的状态:假设当前距离删除数据已经有5 分钟左右的话:

SQL> select * from EMP2 as of timestamp sysdate-5/1440;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
……

用Flashback Query恢复之前的数据:

SQL> INSERT INTO EMP2 SELECT * FROM EMP2 AS OF TIMESTAMP TO_TIMESTAMP('2014-10-16 15:13:06','YYYY-MM-DD HH24:MI:SS');

已创建14行。

SQL> SELECT * FROM EMP2;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
……

建议使用as of scn 的方式执行flashback query,比如需要对多个相互有主外键约束的表进行恢复时,如果使用as of timestamp 的方式,可能会由于时间点不统一的缘故造成数据选择或插入失败,通过scn 方式则能够确保记录的约束一致性。

========================As of scn 示例=======================
1.查看SCN:

SQL> show user;
USER 为 "SYS"
SQL> SELECT dbms_flashback.get_system_change_number FROM dual; GET_SYSTEM_CHANGE_NUMBER
------------------------
1151413 SQL> SELECT CURRENT_SCN FROM V$DATABASE; CURRENT_SCN
-----------
1151425

2.删除数据库/查看删除之前的数据

SQL> SHOW USER;
USER 为 "SCOTT" SQL> DELETE FROM EMP2; 已删除14行。 SQL> SELECT * FROM EMP2; 未选定行 SQL> SELECT * FROM EMP2 AS OF SCN 1151425; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
……

3. 用flashbach query恢复之前的数据

SQL> INSERT INTO EMP2 SELECT * FROM EMP2 AS OF SCN 1151413;

已创建14行。

SQL> SELECT * FROM EMP2;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
……

============================================
4.SCN 与 timestamp 关系
Oracle 在内部都是使用scn,即使你指定的是as of timestamp,oracle 也会将其转换成scn,系统时间标记与scn 之间存在一张表,即SYS 下的SMON_SCN_TIME
每隔5 分钟,系统产生一次系统时间标记与scn 的匹配并存入sys.smon_scn_time 表,该表中记录了最近1440个系统时间标记与scn 的匹配记录,由于该表只维护了最近的1440 条记录,因此如果使用as of timestamp 的方式则只能flashback 最近5 天内的数据(假设系统是在持续不断运行并无中断或关机重启之类操作的话)。
注意理解系统时间标记与scn 的每5 分钟匹配一次这句话,举个例子,比如scn:339988,339989 分别匹配08-05-3013:52:00 和2008-13:57:00,则当你通过as of timestamp 查询08-05-30 13:52:00 或08-05-30 13:56:59 这段时间点内的时间时,oracle 都会将其匹配为scn:339988 到undo 表空间中查找,也就说在这个时间内,不管你指定的时间点是什么,查询返回的都将是08-05-30 13:52:00 这个时刻的数据。
查看SCN 和 timestamp 之间的对应关系:
SQL>select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss')from sys.smon_scn_time;

《FROM:http://blog.csdn.net/tianlesoftware/article/details/4677378

使用带有AS OF子句的SELECT语句进行闪回查询。闪回查询获取之前的时间点的数据。

语句通过时间戳或SCN显示地引用过去的时间。返回在那个时间点当时已经提交的数据。

闪回查询的使用包括:

1. 恢复丢失的数据、撤销不正确的且已经提交的改变。例如,如果你错误地删除或更新了行并且提交了,可以立即撤销这个错误。

2. 比较当前的数据和早些时候的数据。例如,可以运行一个日报表,来显示数据从昨天到今天的变化。

可以比较单独的行;也可以查看行集合的交集和并集。

3. 查看事务数据在特定的时间的状态。例如,可以验证某一天的帐户余额。

4. 通过消除存储一些类型的临时数据所需要,简化应用程序的设计。Oracle允许你直接从数据库获取过去的数据。

5. 对过去的数据应用打包的应用,例如报告产生工具。

6. 为应用提供了错误改正的自我服务,允许用户undo和改变他们的错误。

示例A. 检查和还原过去的数据
假设12:30 PM发现员工Chung所对应的数据行被从employees表中删除了。并且你知道在9:30 AM时,Chung的数据在数据库中是正常的。可以使用闪回查询来查看在9:30 AM时表中的内容,来找到丢失的数据。如果需要,可以还原数据。

-- 使用闪回查询获取丢失的行

SELECT * FROM employees

AS OF TIMESTAMP TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')

WHERE last_name = 'Chung';

--使用闪回查询还原丢失的行

INSERT INTO employees (

SELECT * FROM employees

AS OF TIMESTAMP TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')

WHERE last_name = 'Chung'

);

Oracle闪回查询指导

1. 可以对每个表指定或省略AS OF子句,对不同的表指定不同的次数。

注意:如果一个表是闪回数据归档,并且指定了时间比它创建的时间还要早,则查询会返回0行,而不会引起错误。

2. 可以在查询中使用AS OF子句来执行DDL操作(例如创建和截断表),

也可以用来在和闪回查询相同的会话中执行DML操作(INSERT、DELETE)。

3. 在影响数据库当前状态的DDL语句或DML语句中使用闪回查询的结果,

可以在INSERT或CREATE TABLE AS SELECT语句中使用AS OF子句。

4. 如果在应用中,这种3秒钟的误差对于闪回查询是重要的,则使用SCN而不是时间戳。

5. 可以使用创建视图引用过的数据,即在视图定义的SELECT语句中使用AS OF子句。

如果指定一个相对时间,即从数据库主机的当前时间减去,则对于每个查询,时间要重新计算。

CREATE VIEW hour_ago AS

SELECT * FROM employees AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE);

6. 可以在自连接或集合操作中使用AS OF子句,来提取和比较来自于不同时间的数据。

可以通过在闪回查询之前加上CREATE TABLE AS SELECT或INSERT INTO TABLE SELECT,来存储闪回查询的结果。

INSERT INTO employees

(SELECT * FROM employees AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE))

MINUS

SELECT * FROM employees);

The UNDO_MANAGEMENT parameter must be set to AUTO
The UNDO_RETENTION parameter must be set appropriately

FlashbackQuery:SCN与timestamp示例的更多相关文章

  1. 理解timestamp

    大多数资料都说timestamp表示自从1970-1-1 00:00:00开始到现在的秒数,一般称为epoch time,却忽略了时区的概念.其实,不同时区记录timesamp的基准时间是不一样的,比 ...

  2. 转--Oracle DB 服务器系统时间修改问题与 SCN 关系的深入研究

    论坛里一个朋友说将DB 服务器系统时间往往后修改了3个月(从11年改成10年),启动DB报600的错误. 一. 先做个测试 1.1 关闭DB SQL> shutdown immediate Da ...

  3. 【体系结构】有关Oracle SCN知识点的整理

    [体系结构]有关Oracle SCN知识点的整理 1  BLOG文档结构图   BLOG_Oracle_lhr_Oracle SCN的一点研究.pdf 2  前言部分 2.1  导读和注意事项 各位技 ...

  4. ORACLE恢复数据

    ORACLE恢复删除表或表记录 一:表的恢复      对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有: 1.从flash back里查询 ...

  5. Oracle的数据恢复——Flashback用法汇总

    /* 11g的flashbackup 分好几种,分别用途不一样. A.flashback database 闪回数据库,简单理解就是把数据库闪回到某个以前的时间点, 能恢复到的最早的SCN, 取决与F ...

  6. PLSQL_闪回操作6_Flashback Database

    2014-12-09 Created By BaoXinjian

  7. Oracle_Flashback_技术_总结

    Oracle Flashback 技术 总结 Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数.要使用flashback 的特性,必须启 ...

  8. ocp11g培训内部教材_052课堂笔记(042)_体系架构

    OCP 052 课堂笔记 目录 第一部分: Oracle体系架构... 4 第一章:实例与数据库... 4 1.Oracle 网络架构及应用环境... 4 2.Oracle 体系结构... 4 3. ...

  9. FlashBack 闪回

    [学习目标] Flashback Database 功能非常类似与RMAN的不完全恢复,它可以把整个数据库回退到 过去的某个时点的状态,这个功能依赖于Flashback log日志.比RMAN 更快速 ...

随机推荐

  1. F5(调试)和服务器控件

    一.调试 背景: 今天调试的时候发现我进入的网址是http://×××.com:7813/webaspx/System/Login.aspx(由于代码在公司,我就没有截图,等了半天显示无法加载该页面) ...

  2. cookie 的Domain删除失败的问题

    最近接手一个老项目,项目中使用的是cookie来做的处理的,新增的时候cookie添加了域, 但是删除的时候没有添加域,导致删除cookie的时候一直失败!还有cookie的创建与删除,应该都必需经过 ...

  3. 微软HoloLens虚拟现实可以开发了。

    1.microsoft-hololens-now-available-to-developers 2.http://www.microsoft.com/microsoft-hololens/en-us ...

  4. iOS_SN_基于AFNetworking3.0网络封装

    转发文章,原地址:http://www.henishuo.com/base-on-afnetworking3-0-wrapper/?utm_source=tuicool&utm_medium= ...

  5. o2o

    o2o(电子商务名词) -- 百度名片 O2O即Online To Offline(在线离线/线上到线下),是指将线下的商务机会与互联网结合,让互联网成为线下交易的前台,这个概念最早来源于美国.O2O ...

  6. java Eclipse debug技巧

    摘要:调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试 ...

  7. hdu Big Number 求一个数的位数

    Problem Description In many applications very large integers numbers are required. Some of these app ...

  8. hdu 1196

    Problem Description Given an positive integer A (1 <= A <= 100), output the lowest bit of A. F ...

  9. CSS选择器4是下一代CSS选择器规范

    那么,这一版本的新东西有哪些呢? 选择器配置文件 CSS选择器分为两类:快速选择器和完整选择器.快速选择器适用于动态CSS引擎.完整选择器适用于速度不占关键因素的情况,例如document.query ...

  10. DJANTO之FORM

    文档很仔细,但熟悉要慢慢来~~ from django.shortcuts import render from contact.forms import ContactForm from djang ...