Flashback Version Query也是以SELECT子句的形式调用,其用法并不比AS OF复杂,与其类似,只需要在标准SELECT查询后面附加VERSIONS BETWEEN TIMESTAMP[/SCN] START AND END子句即可。通过VERSIONS BETWEEN能够查看指定时间段内UNDO表空间中记录的不同版本(注意,只包括被提交的记录)。记录在Version Query中可能会是一对多的关系,如某些记录如果被修改过多次并分别提交,那么在查询的时候,如果修改的操作是在指定的时间段(或SCN)内进行的,则记录每次修改的结果都会被显示出来,这倒是比较有利于我们对数据的修改进行对比,查看数据究竟是如何变化的。
Version Query中提供了多个伪列,如表所示。
表 Flashback Query中Version Query的伪列说明
VERSIONS_STARTSCN |
该条记录操作时的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 |
相关知识点:
什么是伪列?我们都知道在创建表时必须指定列名、列类型等信息,这些显式指定的列就是标准的列,在查询时这些列能够被SELECT语句显示出来。除此之外,还有一种列类型,这些列并不存在于表定义中,如你通过DESC TBLNAME查看时看不到这些列的定义,但通过SELECT语句却可以查询这些列的内容,这种列就是Oracle提供的伪列(如SYSDATE之类系统函数不是伪列)。
伪列也并不是在任何查询时都适用,有些列只有特殊的查询语句中才能够显示,如上述表格中提供的6列就仅在使用Versions Query时才能够调用。除此之外还有一些比较常用的ROWNUM、LEVEL等。
网站名称:ORACLEFlashbackQuery伪列-创新互联
本文地址:http://scgulin.cn/article/dohdgg.html