您好,欢迎访问一九零五行业门户网

Oracle的回闪查询

从oracle9i开始,oracle开始提供回闪查询特性(flashback query),允许将回滚段中的数据进行回闪,通过下面的例子来看一下这个从orac
oracle回闪查询的新特性
从oracle9i开始,oracle开始提供回闪查询特性(flashback query),允许将回滚段中的数据进行回闪,通过下面的例子来看一下这个从oracle9i开始提供的新特性.
sql> update emp set sal=4000 where empno=7788;
1 row updated.
sql> update emp set sal=4000 where empno=7782;
1 row updated.
sql> update emp set sal=4000 where empno=7698;
1 row updated.
先不提交这个事务,在另外窗口新开session,使用sys用户查询相关信息,进行进一步的分析
获得事务信息
从事务表中可以获得关于这个事务的信息,该事务位于9号回滚段(xidusn),在9号回滚段
上,该事务位于第29号事务槽(xidslot):
sql> select xidusn,xidslot,xidsqn,ubablk,ubafil,ubarec from v$transaction;
xidusn    xidslot    xidsqn    ubablk    ubafil    ubarec
---------- ---------- ---------- ---------- ---------- ----------
        9        29        385      1350          2        22
从v$rollstat视图中也可获得事务信息,xacts字段代表的是活动事务的数量,同样看到该事务
位于9号回滚段
sql> select usn,writes,rssize,xacts,hwmsize,shrinks,wraps from v$rollstat;
usn    writes    rssize      xacts    hwmsize    shrinks      wraps
---------- ---------- ---------- ---------- ---------- ---------- ----------
        0      7620    385024          0    385024          0          0
        1      21390  29351936          0  29351936          0          0
        2      22108    3268608          0    3268608          0          0
        3      29954    450560          0    450560          0          0
        4      23700    843776          0    843776          0          0
        5      23334    450560          0    450560          0          0
        6      21082    450560          0    450560          0          0
        7      23146    2285568          0    2285568          0          0
        8      28742    843776          0    843776          0          1
        9      22648    2088960          1    2088960          0          0
        10      24326    2220032          0    2220032          0          0
11 rows selected.
这是执行alter system dump datafile 2 block 1350
转储的回滚表空间中的数据块的信息的一部分
*-----------------------------
* rec #0x1d  slt: 0x24  objn: 517(0x00000205)  objd: 517  tblspc: 0(0x00000000)
*      layer:  11 (row)  opc: 1  rci 0x00
undo type:  regular undo    begin trans    last buffer split:  no
temp object:  no
tablespace undo:  no
rdba: 0x00000000
*-----------------------------
uba: 0x00800546.0129.1b ctl max scn: 0x0000.000e4e9c prv tx scn: 0x0000.000e4ea6
txn start scn: scn: 0x0000.000e7526 logon user: 0
 prev brb: 8389956 prev bcl: 0
kdo undo record:
ktb redo
op: 0x04  ver: 0x01
op: l  itl: xid:  0x0006.016.0000015d uba: 0x00800419.00fe.11
                      flg: c---    lkc:  0    scn: 0x0000.000e7524
kdo op code: urp row dependencies disabled
  xtype: xaxtype kdo_kdom2 flags: 0x00000080  bdba: 0x0040100f  hdba: 0x00401001
itli: 2  ispac: 0  maxfr: 4863
tabn: 0 slot: 116(0x74) flag: 0x2c lock: 0 ckix: 191
ncol: 9 nnew: 7 size: 0
vector content:
col  2: [ 2]  c1 0a
col  3: [ 2]  c1 0a
col  4: [ 1]  80
col  5: [ 1]  80
col  6: [ 1]  80
col  7: [ 1]  80
col  8: [ 7]  78 71 01 07 0b 07 34
先注意到这里存在一个信息ctl max scn: 0x0000.000e4e9c,这个转换为scn值就是:
sql> select (to_number('000','xxxx')*power(2,32)+to_number('e4e9c','xxxxxxxx')) scn
from dual;
scn
----------
    937628
查询一下当前数据的scn:
sql> select dbms_flashback.get_system_change_number scn from dual;
scn
----------
    949630
sql>
通过特定的语法,可以将scn 937628的历史状态数据查询出来:
sql> select * from scott.emp as of scn 937628 where empno in(7788,7782,7698);
empno ename      job        mgr hiredate          sal      comm deptno
----- ---------- --------- ----- ----------- --------- --------- ------
 7698 blake      manager    7839 1981-5-1      2850.00              30
 7782 clark      manager    7839 1981-6-9      2450.00              10
 7788 scott      analyst    7566 1987-4-19      10.00              20
sql>
在查询结果中,注意到3名员工的薪水恢复到了之前的状态.而在当前的查询中,这个数据是变化
后的4000:
sql> select * from scott.emp  where empno in(7788,7782,7698);
empno ename      job        mgr hiredate          sal      comm deptno
----- ---------- --------- ----- ----------- --------- --------- ------
 7698 blake      manager    7839 1981-5-1      4000.00              30
 7782 clark      manager    7839 1981-6-9      4000.00              10
其它类似信息

推荐信息