- 论坛徽章:
- 0
|
flashback 是9i中提出的一个特性,它可以让我们查看undo段中的信息。在10g中,flashback的功能增强了,我们可以通过它查看某个期间里不同版本的undo数据。 例子如下: 首先创建一个表: SQL> CREATE TABLE fbt 2 ( x INTEGER 3 , y TIMESTAMP 4 , z VARCHAR2(30) ); 第二步插入数据 INSERT INTO fbt VALUES (1, LOCALTIMESTAMP, 'Initial population'); 第三步更新数据 UPDATE fbt SET y = LOCALTIMESTAMP, z = 'First update'; 第四步再次更新数据 UPDATE fbt SET y = LOCALTIMESTAMP, z = 'Second update'; 第五步删除数据 truncate table sbt (注意每一步之后都要commit)
这时可以用flashback version query来查看下。 flashback version query就是在select语句后面加上如下语法结构 • VERSIONS BETWEEN TIMESTAMP [lower bound] AND [upper bound]; • VERSIONS BETWEEN SCN [lower bound] AND [lower bound]. 这里的lower bound upper bound 可以是timestamp / scn的值,也可以是minvalue maxvalue这两个关键字。 例如: SQL> SELECT x, y, z 2 FROM fbt VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE 3 ORDER BY 4 y; 得到的结果如下 SYS@DCSSS > select * from scott.fbt versions between timestamp minvalue and maxvalue order by y;
X Y Z — - 1 13-JUN-2011 16:42:45.112 Initial population 1 13-JUN-2011 16:45:13.892 first update 1 13-JUN-2011 16:45:53.105 second update 1 13-JUN-2011 16:45:53.105 second update 看最后两行的记录,会有混淆,为了避免这种混淆,oracle提供了一些虚列来帮助我们区分。 这些虚列如下 • 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); and • VERSIONS_OPERATION (DML operation of version).
SELECT z , VERSIONS_STARTTIME , VERSIONS_ENDTIME , VERSIONS_XID , VERSIONS_OPERATION FROM scott.fbt VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE ORDER BY VERSIONS_ENDTIME;
Z VERSIONS_STARTTIME VERSIONS_ENDTIME VERSIONS_XID V — - - - Initial population 13-JUN-2011 16:43:19.000 13-JUN-2011 16:45:25.000 000A00150008812E I first update 13-JUN-2011 16:45:25.000 13-JUN-2011 16:46:05.000 000B00280005560A U second update 13-JUN-2011 16:46:05.000 13-JUN-2011 16:46:13.000 000A000E00088146 U second update 13-JUN-2011
16:46:13.000
0003000700078091 D
通过上面的语句可以查到更多的信息,比如执行操作的transaction id
|
|