Oracle数据库10g新特性中的闪回查询

来源:中国IT实验室 作者:佚名 2008-05-14 出处:pcdog.com

oracle  oracle数据库  
上一页 1 2 

注意,此处显示了对该行所作的所有更改,甚至包括该行被删除和重新插入的情况。VERSION_OPERATION 列显示对该行执行了什么操作 (Insert/Update/Delete)。所做的这些工作不需要历史表或额外的列。

在上述查询中,列 versions_starttime、versions_endtime、versions_xid、versions_operation 是伪列,与 ROWNUM、LEVEL 等其他熟悉的伪列相类似。其他伪列 — 如 VERSIONS_STARTSCN 和 VERSIONS_ENDSCN — 显示了该时刻的系统更改号。列 versions_xid 显示了更改该行的事务标识符。有关该事务的更多详细信息可在视图 FLASHBACK_TRANSACTION_QUERY 中找到,其中列 XID 显示事务 id。例如,使用上述的 VERSIONS_XID 值 000A000D00000029,UNDO_SQL 值显示了实际的语句。

  SELECT UNDO_SQL

  FROM FLASHBACK_TRANSACTION_QUERY

  WHERE XID = '000A000D00000029';

  

  UNDO_SQL

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

  insert into "ANANDA"."RATES"("CURRENCY","RATE")

values ('EURO','1.1013');

 

除了实际语句之外,该视图还显示提交操作的时间标记和 SCN、查询开始时的 SCN 和时间标记以及其他信息。

找出一段时期中的变更

现在,让我们来看如何有效地使用这些信息。假设我们需要找出下午 3:57:54 时 RATE 列的值。我们可以执行:

  select rate, versions_starttime, versions_endtime

  from rates versions

  between timestamp

  to_date('12/1/2003 15:57:54','mm/dd/yyyy hh24:mi:ss')

  and to_date('12/1/2003 16:57:55','mm/dd/yyyy hh24:mi:ss')

  /

  

  RATE VERSIONS_STARTTIME   VERSIONS_ENDTIME

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

    1.1011

 

 

此查询与闪回查询类似。在以上的示例中,开始和结束时间为空,表示汇率在该时间段中没有更改,而是包含一个时间段。还可以使用 SCN 来找出过去的版本值。可以从伪列 VERSIONS_STARTSCN 和 VERSIONS_ENDSCN 中获得 SCN 号。以下是一个示例:

  select rate, versions_starttime, versions_endtime

  from rates versions

  between scn 1000 and 1001

  /  

使用关键词 MINVALUE 和 MAXVALUE,可以显示还原段中提供的所有变更。您甚至可以提供一个特定的日期或 SCN 值作为范围的一个端点,而另一个端点是文字 MAXVALUE 或 MINVALUE。例如,以下查询提供那些只从下午 3:57:52 开始的变更,而不是全部范围的变更:

select versions_starttime, versions_endtime, versions_xid,

versions_operation, rate

from rates versions between timestamp

to_date('12/11/2003 15:57:52', 'mm/dd/yyyy hh24:mi:ss')

and maxvalue

order by VERSIONS_STARTTIME

/

VERSIONS_STARTTIME   VERSIONS_ENDTIME    VERSIONS_XID   V    RATE

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

01-DEC-03 03.57.55 PM             000A000C00000029 D   1.1013

01-DEC-03 03.58.07 PM 01-DEC-03 03.58.17 PM 000A000D00000029 I   1.1016

01-DEC-03 03.58.17 PM             000A000E00000029 U   1.1011

 

最终的分析

闪回版本查询随取随用地复制表变更的短期易变数值审计。这一优点使得 DBA 能够获得过去时间段中的所有变更而不是特定值,只要还原段中提供数据,就可以尽情使用。因此,最大的可用版本依赖于 UNDO_RETENTION 参数.


更多内容请看PCdog.com--数据库体系架构  数据库相关文章专题
上一页 1 2 
上一篇:Oracl基础入门—oracle的命名规则
下一篇:Oracle数据库中如何根据时间来执行JOB