使用闪回版本查询来获取在给定的时间区间中,指定的行的不同版本。当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'; |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1169642/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17013648/viewspace-1169642/