ORACLE VERSIONS 用法

OCA SQL试题
Evaluate the following statements:

CREATE TABLE digits 
(id NUMBER(2), 
description VARCHAR2(15)); 
INSERT INTO digits VALUES (1,'ONE'); 
UPDATE digits  SET description ='TWO' WHERE id=1; 
INSERT INTO digits  VALUES (2,'TWO'); 
COMMIT; 
DELETE FROM digits; 
SELECT description  FROM digits 
VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE; 

What would be the outcome of the above query? 

A. It would not display any values.
B. It would display the value TWO once.
C. It would display the value TWO twice.
D. It would display the values ONE, TWO, and TWO.

在 Oracle9iDatabase 中,我们看到它推出了以闪回查询形式表示的“时间机器”。该特性允许 DBA 看到特定时间的列值,只要在还原段中提供该数据块此前镜像的拷贝即可。但是,闪回查询只提供某时刻数据的固定快照,而不是在两个时间点之间被更改数据的运行状态表示。某些应用程序,如涉及到外币管理的应用程序,可能需要了解一段时期内数值数据的变化,而不仅仅是两个时间点的数值。由于闪回版本查询特性,Oracle Database 10g能够更方便高效地执行该任务。
使用方法:

VERSIONS BETWEEN TIMESTAMP [lower bound] AND [upper bound]

VERSIONS BETWEEN SCN [lower bound] AND [upper bound]

lower bound/ upper bound 可以是具体的timestamp/scn, 也可以是关键字minvalue/maxvalue. 这些关键字让Oracle去找到所有的versions, 当然这要受制于undo_retention参数设置的大小,毕竟这部分信息是放在undo segment上的。

Oracle 10g提供了一些pseudo-columns来帮助我们分析每个version的数据,

VERSIONS_STARTTIME (start timestamp of version);
VERSIONS_STARTSCN (start SCN of version);
VERSIONS_ENDTIME (end timestamp of version);
VERSIONS_ENDSCN (end SCN of version);
VERSIONS_XID (transaction ID of version); 
VERSIONS_OPERATION (DML operation of version);

select description,versionS_starttime, versionS_endtime, versionS_xid,versionS_operation
from digits
versions between timestamp minvalue and maxvalue ;
原文地址:https://www.cnblogs.com/iImax/p/2680447.html