Chinaunix首页 | 论坛 | 博客
  • 博客访问: 22814
  • 博文数量: 11
  • 博客积分: 220
  • 博客等级: 二等列兵
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-02 15:56
文章分类

全部博文(11)

文章存档

2011年(11)

我的朋友

分类: Oracle

2011-06-13 17:26:16

flashback 是9i中提出的一个特性,它可以让我们查看undo段中的信息。在10g中,flashback的功能增强了,我们可以通过它查看某个期间里不同版本的undo数据。
例子如下:
首先创建一个表:
SQL> CREATE TABLE fbt
2 ( x INTEGER
3 , y TIMESTAMP
4 , z (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- 16:42:45.112 Initial population
1 13- 16:45:13.892 first update
1 13- 16:45:53.105 second update
1 13- 16:45:53.105 second update
看最后两行的记录,会有混淆,为了避免这种混淆,oracle提供了一些虚列来帮助我们区分。
这些虚列如下
• (start timestamp of version);
• (start SCN of version);
• (end timestamp of version);
• (end SCN of version);
• (transaction ID of version); and
• (DML operation of version).

SELECT z , , , , FROM scott.fbt VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE ORDER BY ;

Z V
- - -
Initial population 13- 16:43:19.000 13- 16:45:25.000 000A00150008812E I
first update 13- 16:45:25.000 13- 16:46:05.000 000B00280005560A U
second update 13- 16:46:05.000 13- 16:46:13.000 000A000E00088146 U
second update 13- 16:46:13.000 0003000700078091 D

通过上面的语句可以查到更多的信息,比如执行操作的transaction id
阅读(774) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~