使用Flashback Query的场景包括如下:

摘自官档

  • Recovering lost data or undoing incorrect, committed changes.

    For example, if you mistakenly delete or update rows, and then commit them, you can immediately undo the mistake.

  • Comparing current data with the corresponding data at an earlier time.

    For example, you can run a daily report that shows the change in data from yesterday. You can compare individual rows of table data or find intersections or unions of sets of rows.

  • Checking the state of transactional data at a particular time.

    For example, you can verify the account balance of a certain day.

  • Simplifying application design by removing the need to store some kinds of temporal data.

    Oracle Flashback Query lets you retrieve past data directly from the database.

  • Applying packaged applications, such as report generation tools, to past data.

  • Providing self-service error correction for an application, thereby enabling users to undo and correct their errors.

  • 需要授予 FLASHBACK ANY TABLE 权限

假设表personnel在早上4点30的时候发现Smith的记录被删,DBA确定在前天晚上7点30的时候数据是准确的,于是我们可以使用Flashback Query技术找回丢失的数据

查纪录
SELECT *
FROM personnel
AS OF TIMESTAMP
TO_TIMESTAMP('2012-03-21 07:30:00', 'YYYY-MM-DD HH:MI:SS')
WHERE UPPER(last_name) = 'SMITH';
使用闪回查询恢复数据
INSERT INTO personnel
(
SELECT *
FROM personnel
AS OF TIMESTAMP
TO_TIMESTAMP('2012-03-21 07:30:00', 'YYYY-MM-DD HH:MI:SS')
WHERE UPPER(last_name) = 'SMITH'
);

创建过去表的一个视图

CREATE VIEW hour_ago AS
SELECT * FROM employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE);
  • 可以在自连接中使用AS OF子句,或者INTERSECTMINUS提取或者比较两个不同时间点的数据

也可以使用下面的方法恢复丢失的数据

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

场景

CREATE TABLE flashback_query_test (
id NUMBER(10)
); SELECT current_scn, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') FROM v$database; CURRENT_SCN TO_CHAR(SYSTIMESTAM
----------- -------------------
722452 2004-03-29 13:34:12 INSERT INTO flashback_query_test (id) VALUES (1);
COMMIT; SELECT COUNT(*) FROM flashback_query_test; COUNT(*)
----------
1 SELECT COUNT(*)
FROM flashback_query_test AS OF TIMESTAMP TO_TIMESTAMP('2004-03-29 13:34:12', 'YYYY-MM-DD HH24:MI:SS'); COUNT(*)
----------
0 SELECT COUNT(*)
FROM flashback_query_test AS OF SCN 722452; COUNT(*)
----------
0

使用DBMS_FLASHBACK进程闪回查询

This can as well been done with SCN using ENABLE_AT_SYSTEM_CHANGE_NUMBER procedure or timestamp usingENABLE_AT_TIME procedure:

  1. SQL> SELECT current_scn, SCN_TO_TIMESTAMP(current_scn),TO_CHAR(SYSDATE,'dd-mon-yyyy hh24:mi:ss') AS current_time FROM v$database;
  2. CURRENT_SCN SCN_TO_TIMESTAMP(CURRENT_SCN) CURRENT_TIME
  3. ----------- --------------------------------------------------------------------------- -----------------------------
  4. 28954179 15-AUG-11 11.03.48.000000000 AM 15-aug-2011 11:03:48
  5. SQL> EXEC dbms_flashback.enable_at_system_change_number(28954179);
  6. PL/SQL PROCEDURE successfully completed.
  7. SQL> SELECT * FROM test1;
  8. ID DESCR
  9. ---------- ------------------------------
  10. 1 One
  11. 2 Two
  12. 3 Three
  13. SQL> EXEC dbms_flashback.disable;
  14. PL/SQL PROCEDURE successfully completed.
  15. SQL> SELECT * FROM test1;
  16. ID DESCR
  17. ---------- ------------------------------
  18. 1 TEMPORARY
  19. 2 TEMPORARY
  20. 3 TEMPORARY

最后,闪回表到过去,(效果和上面的insert into as select一样)

  1. SQL> flashback TABLE test1 TO scn 28954179;
  2. Flashback complete.
  3. SQL> SELECT * FROM test1;
  4. ID DESCR
  5. ---------- ------------------------------
  6. 1 One
  7. 2 Two
  8. 3 Three

闪回查询(SELECT AS OF)的更多相关文章

  1. 【转】FlashBack总结之闪回查询与闪回表

    本文主要介绍利用UNDO表空间的闪回技术,主要包括:闪回表,闪回版本查询,闪回事务查询,闪回查询.这些闪回技术实现从回滚段中读取表中一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错 ...

  2. 【练习】flushback基于时间的闪回查询

    1.创建table t1 :: SCOTT@ORA11GR2>create table t1 as select * from scott.emp; Table created. :: SCOT ...

  3. Oracle Flashback Technologies - 闪回查询

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

  4. oracle闪回查询

    一.引言 程序中用到需要同步oracle更新和删除数据,于是考虑利用oracle的闪回查询机制来实现. 利用该机制首先需要oracle启用撤销表空间自动管理回滚信息,并根据实际情况设置对数据保存的有效 ...

  5. Oracle的回收站和闪回查询机制(二)

    上一篇中讲诉了Oracle中一些闪回查询(Flashback Query),这是利用回滚段信息来恢复一个或一些表到以前的一个时间点(一个快照).要注意的是,Flashback Query仅仅是查询以前 ...

  6. Oracle的回收站和闪回查询机制(一)

    实际工作中,我们经常会遇到一些情况,误删除某些表或某些表的某些记录,这时候就需要我们将这些记录重新插入进去.如何才能解决这个问题呢? Oracle的Flashback query(闪回查询)为我们解决 ...

  7. Oracle 中利用闪回查询确定某表在某时间点之后的修改内容,并恢复至该时间点

    Oracle 中利用闪回查询确定某表在某时间点之后的修改内容: 1.查看 DELETE 及 UPDATE 操作修改的数据: SQL> SELECT * FROM tab AS OF TIMEST ...

  8. Flashback Query、Flashback Table(快速闪回查询、快速闪回表)

    Flashback Query闪回查询 flashback query是基于undo表空间的闪回,与之相关的参数如下: SQL> show parameter undo NAME         ...

  9. 已知要闪回的大致时间使用基于as of scn的闪回查询

    基本判断出要恢复误操作的dml的时间可以使用如下的方法进行数据的恢复: example: 一.创建test表 -------create table flashback_asof------ crea ...

随机推荐

  1. pdf在线处理网站

    https://smallpdf.com/unlock-pdf

  2. Bubble Cup 8 finals C. Party (575C)

    题意: 给定n个人,分两天晚上去夜总会开派对,要求每天恰好有n/2个人去,且每人去的夜总会各不相同. 每个人对不同的晚上不同的夜总会有不同的满意度,求一个方案使得所有人的满意度之和最大. 夜总会数量= ...

  3. chrome谷歌浏览器插件制作简易教程

    1.在磁盘上创建一个目录,用来放应用的代码和资源 2.在这个目录中,创建一个文本文件,命名为manifest.json,其内容为: { "manifest_version": 2, ...

  4. 第4天--linux内核学习

    驱动使用方式1.编译到内核中 * make uImage进入到系统后mknod /dev/led c 500 0 创建设备节点 2.编译为模块 M make module进入到系统后 mknod /d ...

  5. oracle DML(数据管理语言)sql 基本语句

  6. Jetty+Xfire 嵌入式webService应用实践

    1:使用场景:Mock公安网证件信息校验 2:Jetty嵌入式Server启动方式:由于Jetty9.x(需jdk7.x以上)以后Server启动方式有略微差异,所以分开说明: 2.1 Jetty9. ...

  7. 我们为什么要看《超实用的Node.JS代码段》

    不知道自己Node.JS水平如何?看这张图 如果一半以上的你都不会,必须看这本书,一线工程师用代码和功能页面来告诉你每一个技巧点. 都会一点,但不知道如何检验自己,看看本书提供的面试题: 1.     ...

  8. IP分片详解

    IP分片是网络上传输IP报文的一种技术手段.IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组.不同的链路类型规定有不同最大长度的链路层数据帧,称为链路层MTU(最大传输单 ...

  9. Sicily 1215: 脱离地牢(BFS)

    这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...

  10. 我的js函数库(持续更新)

    常用js初始化函数 function id(obj) { return document.getElementById(obj); } function bind(obj, ev, fn) { if ...