PLSQL_闪回操作2_Fashback Version Query

2014-12-09 Created By
BaoXinjian

Oracle 1一、摘要


相对于Flashback Query
只能见到有一样触及的目标状态,

Oracle 10g引入的Flashback Version
Query可以观看过去某时间段内,记录是怎发生变化的。

据悉这历史,DBA就好高速的判定数是在什么时点发生了错,进而恢复到前的状态。

 

优先押一个伪列 ORA_ROWSCN. 
所谓的伪列,就是借的,不存的数据列,用户创建表时虽然尚无点名,但是Oracle为了保障而丰富的部分里头字段,这些字段可以像普通文书那样的以。

极致熟悉的伪列就是 ROWID,
它一定给一个指南针,指为记录在磁盘上之职务。

ORA_ROWSCN 是Oracle 10g
新增的,暂且把它们看做是记录最后一糟糕吃改动时之SCN。 Flashback Version
Query 就是经过者伪列来跟出记录的变化历史。

 

Oracle 2二、案例


Step1. 创建测试数据

SQL> select * from A;
        ID
        ----------
         2
         1
         3
         4

SQL> insert into A values(5);
已创建 1 行。

SQL> select * from A;
        ID
        ----------
         2
         1
         3
         4
         5

SQL> commit;
提交完成。

SQL> select ora_rowscn, id from A;
ORA_ROWSCN       ID
---------             ----------
   1098443          2
   1098443          1
   1098443          3
   1098443          4
   1098443          5

Step2. 获取更多之史信息

SQL>Select versions_xid,versions_startscn,versions_endscn,
   DECODE(versions_operation,'I','Insert','U','Update','D','Delete', 'Original') "Operation", id from A versions between scn minvalue and maxvalue;

或者

SQL>select xid,commit_scn,commit_timestamp,operation,undo_sql
from flashback_transaction_query q where q.xid in(select versions_xid from B versions between scn 413946 and 413959);
VERSIONS_XID     VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio    ID
---------------- ----------------- --------------- -------- ----------
05001A0054020000           1099482                 Update            3
05001A0054020000           1099482                 Delete            3
05001A0054020000           1099482                 Delete            2
05001A0054020000           1099482                 Delete            1
0400150005020000           1098443                 Insert            5

Step3. 劣质查看

脚我们来讲话下伪列, Flashback Version
Query 技术其实有无数伪列,

但是ORA_ROWSCN是最最着重。它记录之凡最后一不好让改动时之SCN,
注意是于交给的修改。如果没有交到,这个伪列不会见发生变化。

ORA_ROWSCN
缺省是数块级别之,也尽管是一个数目块内之所有记录还是一个ORA_ROWSCN,数据块内随意一长长的记下为改,这个数据库块内之持有记录之ORA_ROWSCN都见面以更改。上例的查询结果为说明。

可我们得以于建表时利用要字
rowdependencies,
可以变动这种缺省行为,使用是重中之重字后,每条记下都产生自己的ORA_ROWSCN。

SQL> create table B (id number(2)) rowdependencies;
表已创建。

SQL> insert into B values(1);
已创建 1 行。

SQL> insert into B values(2);
已创建 1 行。

SQL> insert into B values(3);
已创建 1 行。

SQL> commit;
提交完成。

SQL> select ora_rowscn, id from B;
ORA_ROWSCN         ID
---------- ----------
   1100560          1
   1100560          2
   1100560          3
此处SCN一样,一定很奇怪,这正好说明是最后一次被修改时的SCN,如果没有提交,是不会变的,我们重做一下就清楚了。

SQL> analyze table B compute statistics;
表已分析。

SQL> select ora_rowscn, id from B;
ORA_ROWSCN         ID
---------- ----------
   1100560          1
   1100560          2
   1100560          3

SQL> delete from B;
已删除4行。

SQL> select ora_rowscn, id from B;
未选定行

SQL> insert into B values(1);
已创建 1 行。

SQL> commit;
提交完成。

SQL> insert into B values(2);
已创建 1 行。

SQL> commit;
提交完成。

SQL> select ora_rowscn, id from B;
ORA_ROWSCN         ID
---------- ----------
   1100723          1
   1100729          2

 

Thanks and Regards

Oracle 3

相关文章