理解UNDO-4 总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZengMuAnSha/article/details/60773129

写了前面3章后,感觉还鱼尾,感觉不完整样!有鱼头和鱼尾的问题没有得到解决. 好像吃了一条鱼,只吃了鱼身,没有看到鱼头和

鱼头之疑惑是 读一致性: 当一个查询找到该块,如何通过行来发现该行的是否被修改提交过. 怎么样找到ITL里面 哪个事务槽影响了该行?

实际上它不需要通过行来判断是哪个事务ITL, 而是把整个块中ITL里面已提交的SCN 来对比,凡是大于查询回话开始的SCN 就要回退. 也就是说ITL 大于的 都要回退 通过UBA来. 这样就构造出 CR块

鱼尾问题是 做延迟块清除的时候,如何判断当前的SCN 是自己要的SCN 呢? 如何在控制区里面找到属于自己事务槽的呢?

经过仔细研究 推到出是 通过恢复UNDO首条记录里面的内容,每恢复一次就减掉当前的WRAP#值,直到减到跟自己的WRAP#值一样为止.

如何在控制区里面找到属于自己事务槽的呢? 目前发现只有一条事务控制区记录. 或许每次延迟块清楚 都要把UNDO段头块做恢复.也跟读一致性一样 单独复制到内存区里去做回滚.

当然这样性能比较低下, 如果事务控制区记录了每条事务槽的重用信息的话,这样性能会更高
这个是事务控制区的内容 通过
alter system dump undo header ‘_SYSSMU2_2232571081$’;

TRN CTL:: seq: 0x268a chd: 0x001d ctl: 0x000a inc: 0x00000000 nfb: 0x0000
mgc: 0xb000 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)
uba: 0x00c001ef.2682.28 scn: 0x0000.16c326e5

通过UBA提供的UNDO块地址 DUMP出UNDO内容,先计算出文件和块号
select dbms_utility.data_block_address_file(to_number(‘00c001ef’,
‘xxxxxxxxxxxx’)) file_id,
dbms_utility.data_block_address_block(to_number(‘00c001ef’,
‘xxxxxxxxxxxx’)) block_id
from dual;

然后DUMP:
alter system dump datafile 3 block 495;

内容如下 从蓝色字体看起
* 2017-02-28 15:41:26.505
Start dump data blocks tsn: 2 file#:3 minblk 495 maxblk 495
Block dump from cache:
Dump of buffer cache at level 4 for tsn=2 rdba=12583407
BH (0x20af88f30) file#: 3 rdba: 0x00c001ef (3/495) class: 20 ba: 0x20a3cc000
set: 9 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 240,28
dbwrid: 0 obj: -1 objn: 0 tsn: 2 afn: 3 hint: f
hash: [0x2593c5220,0x1d8fc0110] lru: [0x1f5f8d598,0x1c4f6da98]
ckptq: [NULL] fileq: [NULL] objq: [0x1f3febd00,0x1c4f6dac0] objaq: [0x1f5f8d5d0,0x1c4f6dad0]
st: XCURRENT md: NULL fpin: ‘ktuwh03: ktugnb’ tch: 13
flags: block_written_once redo_since_read
LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [388]
Block dump from disk:
buffer tsn: 2 rdba: 0x00c001ef (3/495)
scn: 0x0000.16c329b0 seq: 0x1e flg: 0x04 tail: 0x29b0021e
frmt: 0x02 chkval: 0x3af8 type: 0x02=KTU UNDO BLOCK
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x00007F4606E8CA00 to 0x00007F4606E8EA00
7F4606E8CA00 0000A202 00C001EF 16C329B0 041E0000 [………)……]
7F4606E8CA10 00003AF8 00070002 0000B03B 28462682 [.:……;….&F(]


UNDO BLK:
xid: 0x0002.007.0000b03b seq: 0x2682 cnt: 0x46 irb: 0x28 icl: 0x0 flg: 0x0000

Rec Offset Rec Offset Rec Offset Rec Offset Rec Offset

0x01 0x1f60 0x02 0x1e48 0x03 0x1dd4 0x04 0x1d50 0x05 0x1ce4
0x06 0x1c80 0x07 0x1c2c 0x08 0x1b9c 0x09 0x1b14 0x0a 0x1a8c
0x0b 0x19fc 0x0c 0x1974 0x0d 0x18ec 0x0e 0x185c 0x0f 0x17e4
0x10 0x175c 0x11 0x16cc 0x12 0x1654 0x13 0x15cc 0x14 0x153c
0x15 0x14c4 0x16 0x143c 0x17 0x1328 0x18 0x12c0 0x19 0x1268
0x1a 0x1214 0x1b 0x11b8 0x1c 0x1144 0x1d 0x10e8 0x1e 0x1094
0x1f 0x100c 0x20 0x0f80 0x21 0x0f18 0x22 0x0e30 0x23 0x0dc8
0x24 0x0d70 0x25 0x0ce8 0x26 0x0c88 0x27 0x0bfc 0x28 0x0b74
0x29 0x0b18 0x2a 0x0abc 0x2b 0x0a60 0x2c 0x0a04 0x2d 0x09a8
0x2e 0x094c 0x2f 0x08f0 0x30 0x0894 0x31 0x0838 0x32 0x07dc
0x33 0x0780 0x34 0x0724 0x35 0x06c8 0x36 0x066c 0x37 0x0610
0x38 0x05b4 0x39 0x0558 0x3a 0x04fc 0x3b 0x04a0 0x3c 0x0444
0x3d 0x03e8 0x3e 0x038c 0x3f 0x0330 0x40 0x02d4 0x41 0x0278
0x42 0x021c 0x43 0x01c0 0x44 0x0164 0x45 0x0108 0x46 0x00ac

*—————————–
* Rec #0x1 slt: 0x1e objn: 66563(0x00010403) objd: 66563 tblspc: 1(0x00000001)
* Layer: 11 (Row) opc: 1 rci 0x00
Undo type: Regular undo Begin trans Last buffer split: No
Temp Object: No
Tablespace Undo: No
rdba: 0x00000000Ext idx: 0
flg2: 0
*—————————–
uba: 0x00c001ee.2682.32 ctl max scn: 0x0000.16c3268f prv tx scn: 0x0000.16c32695
txn start scn: scn: 0x0000.16c3294b logon user: 0
prev brb: 12583404 prev bcl: 0
KDO undo record:
KTB Redo
op: 0x04 ver: 0x01
compat bit: 4 (post-11) padding: 1
op: L itl: xid: 0x0004.00d.0000b28c uba: 0x00c019c4.2439.1b
flg: C— lkc: 0 scn: 0x0000.16c32942
KDO Op code: LKR row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x00807955 hdba: 0x00807952
itli: 2 ispac: 0 maxfr: 4858
tabn: 0 slot: 7 to: 0

*—————————–
* Rec #0x2 slt: 0x1e objn: 66563(0x00010403) objd: 66563 tblspc: 1(0x00000001)
* Layer: 11 (Row) opc: 1 rci 0x01
Undo type: Regular undo Last buffer split: No
Temp Object: No
Tablespace Undo: No
rdba: 0x00000000
*—————————–

总结图
这里写图片描述

请关注公众号:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/ZengMuAnSha/article/details/60773129