10g新特性——闪回版本查询

由于粗心大意,在数据库中误操作数据的情况经常的发生。在9i之前,一般只能通过logminer或者时间点恢复来找回丢失的数据。在9i中出现了一种新的恢复技术——flashback,这样我们有了一种强有力的恢复工具,可以在不影响系统的情况下在最短的时间内找到丢失的数据。但是9i中的flashback还有很多的不足,使用起来并不是很方便。在10g中对flashback进行增强,使用简单明了,并且增加了对闪回版本查询的支持。
先举例说明下10g中的flashbak
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 – Production
SQL> create table sunwg (id number);
表已创建。
SQL> insert into sunwg values (1);
已创建 1 行。
SQL> insert into sunwg values (2);
已创建 1 行。
SQL> insert into sunwg values (3);
已创建 1 行。
SQL> commit;
提交完成。

SQL> select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'
-----------------
20080310 11:26:20


SQL> delete from sunwg where id = 2;
已删除 1 行。
SQL> commit;
提交完成。
SQL> select * from sunwg;
        ID
--------------------
         1
         3
SQL> select * from sunwg as of timestamp to_date('20080310 11:26:20','yyyymmdd hh24:mi:ss');
        ID
------------------
         1
         2
         3

通过flashback我们能很容易的找到被删掉的ID = 2的记录。但是,有的时候仅仅找到丢失的数据还远远不够,我们还希望知道在这两个时间点的变化情况。在9i中,这是很难实现的,除非做时时的检测。在10g中,则要简单的多。
SQL> update sunwg set id = 4 where id =3;
已更新 1 行。
SQL> commit;
提交完成。
SQL> select * from sunwg;
        ID
----------------
         1
         4

现在我们通过10g新提供的闪回版本查询来找到在两个时间点之前表sunwg到底发生了什么事情。
SQL>   select versions_starttime,versions_endtime,versions_operation, id
  2      from sunwg
  3      versions between timestamp minvalue and maxvalue
  4     order by VERSIONS_STARTTIME;


VERSIONS_STARTTIME   VERSIONS_ENDTIME      V         ID
-------------------- -------------------- -------- - ----------
10-3月 -08 11.25.44  10-3月 -08 11.31.24   I          3
10-3月 -08 11.25.44  10-3月 -08 11.26.38   I          2
10-3月 -08 11.25.44                        I          1
10-3月 -08 11.26.38                        D          2
10-3月 -08 11.31.24                        U          4

上面这个查询就是10g新提供的闪回版本查询特性。从这个结果我们能看到ID = 3的记录是在11:25:44秒插入到数据的,然后是在11:31:24秒生命终止了,我们知道在这个时刻ID = 3的被更新为ID = 4的记录了。我们看ID = 4这条记录也可以看得出来,这条记录是在11:31:24的时候被更新了。
做过数据仓库的人应该很清楚这就是最基础的记历史的格式,在数据仓库中为了记录历史信息,所以每条记录都会自己的生命周期信息,一般得到这样的信息需要进行大量的查询和比对工作。但是利用10g的新特性,我们能很轻易的查询到这样的信息。
在上述查询中,列 versions_starttime、versions_endtime、versions_xid、versions_operation 是伪列,与 ROWNUM、LEVEL 等其他熟悉的伪列相类似。其他伪列 — 如 VERSIONS_STARTSCN 和 VERSIONS_ENDSCN — 显示了该时刻的系统更改号。列 versions_xid 显示了更改该行的事务标识符。有关该事务的更多详细信息可在视图 FLASHBACK_TRANSACTION_QUERY 中找到,其中列 XID 显示事务 id。例如,通过查询FLASHBACK_TRANSACTION_QUERY中VERSIONS_XID 值等于 000A000D00000029的记录,我们可以得到实际的语句UNDO_SQL。
最大的可用版本依赖于 UNDO_RETENTION。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值