Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1244433
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: Oracle

2013-04-25 11:09:15

3、Versions between版本查询

功能更加强大,通过versions between能够查看指定时间段内undo表空间中记录的不同版本(注意,只包括被提交的记录)。

版本查询的用法并不比as of复杂,与其类似,你只需要在标准查询后面附加versions between timestamp[/scn] t1 and t2即可。记录在版本查询中可能会是一对多的关系,比如某些记录如果被修改过多次,并分别提交,那么你在查询的时候,如果修改的操作是在你指定的时间段(或scn),则记录每次修改的结果都会被选择出来,这比较有利于我们做数据的对比,比如看看数据究竟是怎么变化的。

版本查询过程中提供了多个伪列如下:

VERSIONS_STARTSCN
VERSIONS_STARTTIME

该记录操作时的scn或时间,如果为空,表示该行记录是在查询范围外创建的。

VERSIONS_ENDSCN

VERSIONS_ENDTIME

该记录失效时的scn或时间,如果为空,说明记录当前时间在当前表内存在,或者已经被删除了,可以配合着VERSIONS_OPERATION列来看,如果VERSIONS_OPERATION列值为D,说明该列已被删除,如果该列为空,则说明记录在这段时间无操作。

VERSIONS_XID

该操作的事务ID

VERSIONS_OPERATION

对该行执行的操作:I表示insert,D表示delete,U表示update。

提示:对于索引键的update操作,版本查询可能会将其识别成两个操作:DELETE和INSERT。

举个例子(仍用前面创建的测试表):

--先来查询一下当前的scn,方面我们后面确认选择的范围

JSSWEB> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

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

                  372466

JSSWEB> update jss_tb1 set id=id+100 where id>15;

已更新5行。

JSSWEB> commit;

提交完成。

JSSWEB> delete jss_tb1 where id<5;

已删除4行。

JSSWEB> commit;

提交完成。

JSSWEB> insert into jss_tb1 values (201,'A1');

已创建 1 行。

JSSWEB> insert into jss_tb1 values (202,'B1');

已创建 1 行。

JSSWEB> commit;

提交完成。

--再来查询一下当前的scn,方面我们后面确认选择的范围

JSSWEB> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

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

                  372538

通过versions between,我们就可以看到表jss_tb1中的记录的变化情况:

JSSWEB> select id,vl,versions_startscn,versions_endscn,versions_operation

  2  from jss_tb1 versions between scn 372466 and 372538 order by 2;

        ID VL                   VERSIONS_STARTSCN VERSIONS_ENDSCN V

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

         1 A                               372512                 D

         1 A                                               372512

       201 A1                              372523                 I

         2 B                               372512                 D

         2 B                                               372512

       202 B1                              372523                 I

         3 C                               372512                 D

         3 C                                               372512

         4 D                                               372512

         4 D                               372512                 D

         5 E

         6 F

         7 G

         8 H

         9 I

        10 J

        11 K

        12 L

        13 M

        14 N

        15 O

       116 P                               372466                 U

       117 Q                               372466                 U

       118 R                               372466                 U

       119 S                               372466                 U

       120 T                               372466                 U

已选择26行。

根据这个结果返回我们首先来看id<5的记录,每个记录各有两个版本,一行的VERSIONS_STARTSCN和VERSIONS_OPERATION有值,记录了开始时的SCN和执行的操作,另一行则是VERSIONS_ENDSCN有值,记录了该版本失效时的scn。

Id>200的有两条记录,是我们自己手工添加中,从VERSIONS_OPERATION列可以看出操作是insert。

另有5行id>100 and id<200的,从VERSIONS_OPERATION列可以看出操作是update,这是我们手工执行update set的结果。

===================================

阅读(1071) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~