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,
它一定于3个指南针,指向记录在磁盘上的岗位。

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_Oracle,ROWSCN
缺省是数额块级其他,也等于2个数目块内的保有记录都以贰个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

相关文章