Welcome 微信登录

首页 / 数据库 / MySQL / Oracle的回闪查询

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 0x00Undo type:  Regular undo    Begin trans    Last buffer split:  NoTemp Object:  NoTablespace Undo:  Nordba: 0x00000000*-----------------------------uba: 0x00800546.0129.1b ctl max scn: 0x0000.000e4e9c prv tx scn: 0x0000.000e4ea6txn start scn: scn: 0x0000.000e7526 logon user: 0 prev brb: 8389956 prev bcl: 0KDO undo record:KTB Redoop: 0x04  ver: 0x01op: L  itl: xid:  0x0006.016.0000015d uba: 0x00800419.00fe.11                      flg: C---    lkc:  0    scn: 0x0000.000e7524KDO Op code: URP row dependencies Disabled  xtype: XAxtype KDO_KDOM2 flags: 0x00000080  bdba: 0x0040100f  hdba: 0x00401001itli: 2  ispac: 0  maxfr: 4863tabn: 0 slot: 116(0x74) flag: 0x2c lock: 0 ckix: 191ncol: 9 nnew: 7 size: 0Vector content:col  2: [ 2]  c1 0acol  3: [ 2]  c1 0acol  4: [ 1]  80col  5: [ 1]  80col  6: [ 1]  80col  7: [ 1]  80col  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")) scnfrom 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 7788 SCOTT      ANALYST    7566 1987-4-19    4000.00              20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 下一页
Oracle redo文件记录的内容PL/SQL: ORA-00942: table or view does not exist相关资讯      Oracle查询  Oracle回闪  Oracle回闪查询 
  • MySQL、SQL Server、Oracle数据库  (08/16/2015 10:43:52)
  • Oracle分段查询  (02/08/2015 11:29:11)
  • Oracle 查询锁之间的依赖关系  (09/11/2014 06:21:54)
  • Oracle??询数据库对象所属用户  (03/25/2015 21:03:12)
  • Oracle 子查询因子化 浅谈(with的  (01/13/2015 18:46:53)
  • Oracle常用系统查询  (07/18/2014 16:03:01)
本文评论 查看全部评论 (0)
表情: 姓名: 字数