ITPub博客

首页 > 数据库 > Oracle > Oracle 11G 闪回技术 使用闪回版本查询

Oracle 11G 闪回技术 使用闪回版本查询

Oracle 作者:kingsql 时间:2015-05-22 20:49:49 0 删除 编辑

使用闪回版本查询来获取在给定的时间区间中,指定的行的不同版本。当COMMIT语句被执行时,一个新的行版本被创建。

闪回版本查询使用VERSIONS BETWEEN子句:VERSIONS {BETWEEN {SCN | TIMESTAMP} start AND end}

start和end是代表开始和结束的表达式,代表被查询的时间区间。

闪回版本查询返回一个表,包含行在指定的时间区间中的所有版本。在表中的每行都包含关于行版本的元数据伪列。

这些信息可以显示数据库何时和如何发生特定的改变。

表 12.1  Oracle闪回版本查询行数据伪列

伪列

描述

VERSIONS_STARTSCN

VERSIONS_STARTTIME

行版本被创建时的SCN或TIMESTAMP。这个伪列标识了最初拥有这个行版本的值的时候的时间。

使用这个值为闪回表或闪回查询确定过去的目标时间。

如果这个伪列为NULL,则行版本在start之前被创建。(使用start和end确定一个时间范围)

VERSIONS_ENDSCN

VERSIONS_ENDTIME

行版本过期的SCN或TIMESTAMP

如果为NULL,则表明行版本是在查询的时间为当前版本,或对应于删除操作的行。

VERSIONS_XID

标识创建行版本的事务

VERSIONS_OPERATION

事务执行的操作(I-INSERT, D-DELETE,U-UPDATE)。版本就是被插入、删除、更新的行。即插入和更新操作之后、删除操作之前的行。

对于索引键的用户更新,闪回版本查询会将一个UPDATE操作2个操作,即DELETE和INSERT。

 

给定的行版本从它的VERSIONS_START*开始到VERSIONS_END*一直有效。但不包括结束边界点。

即t∈[VERSIONS_START*, VERSIONS_END*)

--表明从2003.09.09-2003.10.25日,salary一直是10243

VERSIONS_START_TIME     VERSIONS_END_TIME     SALARY

-------------------     -----------------     ------

09-SEP-2003               25-NOV-2003             10243

--闪回版本查询的典型应用

SELECT versions_startscn, versions_starttime, versions_endscn, versions_endtime, versions_xid, versions_operation, last_name, salary

  FROM employees

  VERSIONS BETWEEN TIMESTAMP

  TO_TIMESTAMP('2008-12-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS')

  AND TO_TIMESTAMP('2008-12-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS')

  WHERE first_name = 'John';

可以在闪回事务查询中使用VERSIONS_XID来定位事务的元数据,包括撤销行改变的SQL语句和产生这个改变的用户。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28389881/viewspace-1667737/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
OCM

注册时间:2013-02-28

  • 博文量
    237
  • 访问量
    918383