一篇关于 flashback version qrery 的好文章
来源:互联网 发布:常用动画制作软件 编辑:程序博客网 时间:2024/06/04 00:55
出自:http://hi.baidu.com/sunboy_zzc/item/290337d754cd623f2b35c75f
flashback version query提供了一个审计行改变的功能,它能找到所有已经提交了的行的记录,比如说,时间1,我插入一条记录,时间2我删除了这条记录,对于时间3,当然查询不到这条记录,但是flashback version query能够把时间1、时间2的操作给记录下来,并详细的查询出来。
flashback version query一样依赖于AUM,所以,这里就不再多说AUM的配置。flashback version query采用VERSIONS BETWEEN语句来进行查询,常用的有
· VERSIONS_SCN - 系统改变号
· VERSIONS_TIMESTAMP - 时间
flashback version query是一个功能强大的工具,可以分析到什么时间执行了什么操作的问题。也可以用于记录的审计,而没有必要去开启细粒度审计功能或者是使用LOGMNR了。
下面将展示这个具有电影功能的flashback version query
SQL> connect test/test
Connected.
SQL> create table test(a int,b varchar2(10));
Table created.
我们执行一系列如下的操作
16:33:17 SQL> insert into test values(1,'16:33:17');
1 row created.
16:33:31 SQL> commit;
Commit complete.
16:33:34 SQL> update test set a=2,b='16:33:34';
1 row updated.
16:33:53 SQL> commit;
Commit complete.
16:33:57 SQL> update test set a=3;
1 row updated.
16:34:04 SQL> commit;
Commit complete.
16:34:06 SQL> delete test;
1 row deleted.
16:34:11 SQL> commit;
Commit complete.
16:34:13 SQL> insert into test values(4,'16:34:13');
1 row created.
16:34:32 SQL> commit;
Commit complete.
16:34:34 SQL> update test set a=5,b='16:34:34';
1 row updated.
16:34:46 SQL> commit;
Commit complete.
现在,我们看到该表最后的记录是
16:34:49 SQL> select * from test;
A B
---------- ----------
5 16:34:34
这个时候,如果我们利用flash table或者是flash query,我们也只能是看到过去的莫一个快照而已,利用flashback version query,我们将找到其中的任何变化,如
SQL>select versions_starttime, versions_endtime, versions_xid,
versions_operation, a,b
from test versions between timestamp minvalue and maxvalue
order by VERSIONS_STARTTIME;
VERSIONS_STARTTIME VERSIONS_ENDTIME VERSIONS_XID VERSIONS_OPERATION A B
---------------- ------------- ----------- ---------------- ------ ------
07-APR-04 04.33.33 PM 07-APR-04 04.33.55 PM 0400230098010000 I 1 16:33:17
07-APR-04 04.33.55 PM 07-APR-04 04.34.04 PM 0400270098010000 U 2 16:33:34
07-APR-04 04.34.04 PM 07-APR-04 04.34.13 PM 0400280098010000 U 3 16:33:34
07-APR-04 04.34.13 PM 0400290098010000 D 3 16:33:34
07-APR-04 04.34.31 PM 07-APR-04 04.34.47 PM 0400260098010000 I 4 16:34:13
07-APR-04 04.34.47 PM 04000C0099010000 U 5 16:34:34
6 rows selected
注意:
此处显示了对该表所作的所有更改,甚至包括该行被删除和重新插入的情况。VERSION_OPERATION 列显示对该行执行了什么操作 (Insert/Update/Delete)。所做的这些工作不需要历史表或额外的列。
flashback version query记载的是行的改变,如果一个操作有多行的改变,如delete from tablename,那么,在flashback version query对应的也是多行。
在上述查询中,列 versions_starttime、versions_endtime、versions_xid、versions_operation 是伪列,与 ROWNUM、LEVEL 等其他熟悉的伪列相类似。其他伪列 - 如 VERSIONS_STARTSCN 和 VERSIONS_ENDSCN - 显示了该时刻的系统更改号。列 versions_xid 显示了更改该行的事务标识符。有关该事务的更多详细信息可在视图 FLASHBACK_TRANSACTION_QUERY 中找到(这个将在flashback transaction query中描述)。
当然,除了分析以上所有的变更之外,我们可以指定时间段,如
select a,b
from test versions between timestamp
to_date('2004-04-07 04:34:04','yyyy-mm-dd hh24:mi:ss')
and to_date('2004-04-07 04:34:50','yyyy-mm-dd hh24:mi:ss')
还可以使用 SCN 来找出过去的版本值。可以从伪列 VERSIONS_STARTSCN 和 VERSIONS_ENDSCN 中获得 SCN 号。以下是一个示例:
select versions_starttime, versions_endtime
from test versions
between scn 1000 and 1001
- 一篇关于 flashback version qrery 的好文章
- 一篇关于Java克隆的好文章
- 一篇关于JSTL的好文章
- 一篇关于session的好文章
- 一篇关于JSTL的好文章
- 一篇关于JSTL的好文章
- 一篇关于句柄的好文章
- 介绍一篇关于session的好文章
- 关于log4j的一篇好文章
- 保存一篇关于Vi的好文章
- 一篇关于bootloader的好文章
- 一篇关于多线程同步的好文章
- 关于Makefile的一篇好文章
- 一篇关于职业选择的好文章
- 一篇关于bootloader的好文章
- 转载一篇关于堆栈的好文章
- 关于职业规划的一篇好文章
- 一篇关于A*的文章相当好
- 面试题---求数据之和
- 优化VMware提高虚拟机运行速度的技巧
- Windows双屏使用IE时下拉菜单遇到的问题
- win2003→win2008水晶报表多打印一张空白页
- [Android] Activity简介
- 一篇关于 flashback version qrery 的好文章
- python写的C/S程序
- search engine start
- 《Visual C++ 2010入门教程》系列六:VC2010常见调试技术
- 启动Tomcat时报错,一大堆的
- Pythonic (一 iterator)
- Tesseract-OCR3.0语言库训练步骤
- 冯大辉:十年莽撞 IT 路
- MFC的MESSAGE MAP宏