• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Oracle的回闪查询

mysql 搞代码 4年前 (2022-01-09) 24次浏览 已收录 0个评论

从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 来&源gao@dai!ma.com搞$代^码%网 4000.00 30

7782 CLARK MANAGER 7839 1981-6-9 4000.00 10


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Oracle的回闪查询

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址