一、引言

程序中用到需要同步oracle更新和删除数据,于是考虑利用oracle的闪回查询机制来实现。

利用该机制首先需要oracle启用撤销表空间自动管理回滚信息,并根据实际情况设置对数据保存的有效期,即对数据的操作保存多久?

查看撤销表信息undo: show parameter undo;

设置撤销表信息:

alter system set undo_managerment=auto;设置为auto才可以使用闪回查询

alter system set undo_retention=900;最长保留时间(单位秒)

alter system set undo_tablespace=undotbs1;

二、闪回查询的使用

参考:

http://www.oracle-developer.net/display.php?id=320

http://www.oracle-developer.net/display.php?id=210

flashback version query 通过where字句扩展VERSION BETWEEN来实现。

Flashback version query is invoked using the new VERSIONS BETWEEN extension to the FROM clause. It takes two forms as follows
VERSIONS BETWEEN TIMESTAMP [lower bound] AND [upper bound]; or
VERSIONS BETWEEN SCN [lower bound] AND [lower bound].

例子:

在表上执行了一次插入、两次更新、一次删除

SELECT x, y, z
FROM fbt VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE
ORDER BY y;

结果:

         X Y                         Z
---------- ------------------------- -----------------------
1 10-AUG-2005 18:00:57.078 Initial population
1 10-AUG-2005 18:01:07.109 First update
1 10-AUG-2005 18:01:17.125 Second update
1 10-AUG-2005 18:01:17.125 Second update 4 rows selected.

三、闪回查询机制实现原理

As stated above, Oracle provides a variety of metadata with each version of our data. The metadata is exposed via a number of pseudo-columns that we can use with our flashback version queries. These pseudo-columns are as follows:
就像上面显示的,oracle对于我们数据的每个版本提供了一个元信息。这些元信息通过一些伪列显示出来,我们可以在闪回查询中使用这些伪列。这些伪列如下: VERSIONS_STARTTIME (start timestamp of version); 版本开始时间戳
VERSIONS_STARTSCN (start SCN of version); 版本开始系统更改号(SCN:system change number)
VERSIONS_ENDTIME (end timestamp of version); 版本结束时间
VERSIONS_ENDSCN (end SCN of version); 版本结束系统更改号
VERSIONS_XID (transaction ID of version); and 版本
VERSIONS_OPERATION (DML operation of version). 版本操作类型(包括增、删、改)
We can now include some of these pseudo-columns in our flashback version query as follows. Note the SCN metadata is excluded as we are using timestamps for the examples.
现在我们可以在下面的闪回查询sql语句中包含这些伪列,没有包括SCN元信息的原因是我们使用了时间戳在这个例子中。 SQL> SELECT z
, VERSIONS_STARTTIME
, VERSIONS_ENDTIME
, VERSIONS_XID
, VERSIONS_OPERATION
FROM fbt VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE
ORDER BY
VERSIONS_ENDTIME;
Z VERSIONS_STARTTIME VERSIONS_ENDTIME VERSIONS_XID VERSIONS_OPERATION
-------------------- ------------------------- ------------------------- ---------------- ------------------
Initial population -AUG- ::53.000 -AUG- ::05.000 040026008A010000 I
First update -AUG- ::05.000 -AUG- ::14.000 040029008A010000 U
Second update -AUG- ::14.000 -AUG- ::26.000 040027008A010000 U
Second update -AUG- ::26.000 040028008A010000 D rows selected.
This explains why we were seeing the second update row twice. If we look at the VERSIONS_OPERATION column, we can see that the second appearance of the final update record is actually the delete operation against it (specified by 'D'). Without the versions metadata, the Y timestamp column was actually confusing us into thinking we had two versions of the same record at the same time.
这里解释了为什么在上面我们看到了两行更新操作。如果我们看一下VERSION_OPERATION列,我们就可以看到第二次更新实际上是以操作类型D即delete来记录的。除了元信息,Y列的时间戳也使我们很迷惑,两次版本的时间是一样的。 The metadata also gives us an indication that the delete operation was the final version of this data. The end timestamp of the version is NULL which tells us that there is no superceding record.
元信息也告诉我们删除操作是关于这个数据的最后一个版本。这个版本的结束时间戳是NULL也告诉了我们这是一个没有后续操作的记录。 Interestingly, if we had not included a sleep between creating the FBT table and adding the single record, it would be likely (based on observations) that all VERSIONS_* pseudo-columns (except the ENDTIME and ENDSCN) would be NULL for the insert record.
有趣的是,如果我们没有在创建fbt表和插入一个记录时间做休眠,它就可能会显示出(根据观察)所有以VERSIONS_开头的伪列(除了ENDTIME和ENDSCN)可能都是NULL对于这次插入。

oracle闪回查询的更多相关文章

  1. Oracle闪回查询恢复delete删除数据

    Flashback query(闪回查询)原理 Oracle根据undo信息,利用undo数据,类似一致性读取方法,可以把表置于一个删除前的时间点(或SCN),从而将数据找回. Flashback q ...

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

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

  3. Oracle Flashback Technologies - 闪回查询

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

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

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

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

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

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

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

  7. Oracle 修改 新增 触发器 针对字段修改 触发器 误删Oracle表、数据、触发器找回 闪回查询

    emmmm 写这个博客心情很复杂,,,本来这个触发器早就写好了,后来发生点事就写个博客当个备份吧,就当留纪念了:话不多数上问题以及SQL: 问题: 在ABONPB表上增加一个触发器,针对车牌号字段做u ...

  8. 闪回查询(SELECT AS OF)

    使用Flashback Query的场景包括如下: 摘自官档 Recovering lost data or undoing incorrect, committed changes. For exa ...

  9. Oracle闪回技术详解

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

随机推荐

  1. ACdream 1103 瑶瑶正式成为CEO(树链剖分+费用流)

    Problem Description 瑶瑶(tsyao)是某知名货运公司(顺丰)的老板,这个公司很大,货物运输量极大,因此公司修建了许多交通设施,掌控了一个国家的交通运输. 这个国家有n座城市,公司 ...

  2. linux添加字体的过程

    只说一下过程, 至于具体的原理还没搞明白. 1. 首先你要有字体文件,ttf或者ttc格式的均可以 我们可以从windows的 C:\WINDOWS\Fonts\ 这个目录下的字体文件复制出来,例如我 ...

  3. 安装kingroot之后的残留

    /system/usr/icu/icusuflag.conf/system/usr/ikm/ikmsu/system/usr/iku//system/usr/attrch/system/etc/ins ...

  4. Android学习参考

    收到一些朋友的微博私信,说能不能给Android新手们一些指导,我只能说指导谈不上,毕竟我也很多东西正在学习中,与此同时一大学同学准备转行Android,可以说是从头开始,那么我就姑且以一个过来人的身 ...

  5. datasnap 的线程池(转)

    datasnap的线程池 新的datasnap使用INDY10的线程池.不管你知不知道,DATASNAP都是使用线程池了,这和MIDAS不同,MIDAS默认是没有线程池的. 跟踪INDY10线程池类T ...

  6. 所谓完整的linux系统包括哪些部分呢?【转】

    本文转载自:http://www.eeskill.com/article/index/id/1358.html 简介:三部分:bootloader.linux kernel(linux内核).root ...

  7. 将edit ctrL弄的像个dos

    case WM_CTLCOLOREDIT: { HWND hShellText = GetDlgItem(hDlg,IDC_TXT_SHELL); if (hShellText == (HWND)lP ...

  8. 电影TS、TC、SCR、R5、BD、HD等版本是什么意思

    在很多电影下载网站的影片标题中我们都能看到,比如<刺杀希特勒BD版>.<游龙戏凤TS版>等,这些英文缩写都是什么意思呢?都代表什么画质?以下就是各个版本的具体含义: 1.CAM ...

  9. Android BlueDroid(一):BlueDroid概述 【转】

    转自:http://blog.csdn.net/xubin341719/article/details/40378205 版权声明:本文为博主原创文章,未经博主允许不得转载. 关键词:bluedroi ...

  10. Table Properties [AX 2012]

    Table Properties [AX 2012] 1 out of 2 rated this helpful - Rate this topic Updated: July 20, 2012 Ap ...