首页 > 代码库 > oracle core04_undo
oracle core04_undo
undo信息
oracle中undo的信息主要完成下面的功能:
- 1,构建块一致性读
- 2,回滚事务
UBA:undo block address
1,块中的事务槽ITL中的UBA表示这个ITL所在的block历经的最后一次改变所对应的undo record所在的UBA,主要用于一致读。
2,undo segment header中的UBA表示所对应的transaction的undo chain的最后一个UBA,用于transaction的回滚。
可以通过v$KTUXE视图来查看undo segment header中的transaction table情况。
下面通过实验来看一下:
1,查看undo segment header。
第一步:更新记录
1 2 | SYS/SYS@ORCL> update test set name = ‘jkkkkkkkkkkkkkkkkkkkkkk‘ where id=2; 1 row updated. |
第二步:查看本事务使用的undo segment以及文件和块的情况
1 2 3 4 5 6 7 8 9 10 11 12 13 | SYS/SYS@ORCL> select XIDUSN as segment_id, ubafil as file_id, ubablk, start_ubablk, used_ublk from v$ transaction ; SEGMENT_ID FILE_ID UBABLK START_UBABLK USED_UBLK ---------- ---------- ---------- ------------ ---------- 10 2 715 715 1 1 row selected. SYS/SYS@ORCL> select segment_name, segment_id, file_id,block_id from dba_rollback_segs where segment_id=10; SEGMENT_NAME SEGMENT_ID FILE_ID BLOCK_ID ------------------------------------------------------------ ---------- ---------- ---------- _SYSSMU10$ 10 2 153 1 row selected. |
所以,本事务使用的undo segment_id为10,file_id为2,undo segment header的block_id为153。 下面dump这个undo segment header来看下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | Extent Header:: spare1: 0 spare2: 0 #extents: 3 #blocks: 143 last map 0x00000000 #maps: 0 offset: 4080 Highwater:: 0x008002cd ext#: 2 blk#: 68 ext size : 128 #blocks in seg. hdr‘s freelists: 0 #blocks below: 0 mapblk 0x00000000 offset: 2 Unlocked Map Header:: next 0x00000000 #extents: 3 obj#: 0 flag: 0x40000000 Extent Map ----------------------------------------------------------------- 0x0080009a length: 7 0x008000d9 length: 8 0x00800289 length: 128 Retention Table ----------------------------------------------------------- Extent Number:0 Commit Time : 1326479408 Extent Number:1 Commit Time : 1326479408 Extent Number:2 Commit Time : 1326479408 TRN CTL:: seq: 0x00f4 chd: 0x0021 ctl: 0x002b inc: 0x00000000 nfb: 0x0002 mgc: 0x8201 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe) uba: 0x008002cb.00f4.0c scn: 0x0000.000ddd2f Version: 0x01 FREE BLOCK POOL:: uba: 0x00000000.00f4.0b ext: 0x2 spc: 0x1a64 uba: 0x008002cc.00f4.11 ext: 0x2 spc: 0xf9c uba: 0x008002cd.00f4.01 ext: 0x2 spc: 0x1f88 uba: 0x00000000.00eb.01 ext: 0x2 spc: 0x1f88 uba: 0x00000000.00eb.01 ext: 0x2 spc: 0x1f88 TRN TBL:: index state cflags wrap# uel scn dba parent-xid nub stmt_num cmt ------------------------------------------------------------------------------------------------ 0x00 9 0x00 0x00f9 0x0011 0x0000.000e3357 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326654543 0x01 9 0x00 0x00f9 0x0000 0x0000.000e3297 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326654005 0x02 9 0x00 0x00f9 0x0006 0x0000.000e2fe0 0x008002bd 0x0000.000.00000000 0x00000001 0x00000000 1326652743 0x03 9 0x00 0x00f9 0x0008 0x0000.000e3153 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326653343 0x04 9 0x00 0x00f9 0x002d 0x0000.000e30f3 0x008002bd 0x0000.000.00000000 0x00000001 0x00000000 1326653343 0x05 9 0x00 0x00f9 0x000c 0x0000.000e312a 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326653343 0x06 9 0x00 0x00f9 0x0025 0x0000.000e30be 0x008002bd 0x0000.000.00000000 0x00000001 0x00000000 1326653343 0x07 9 0x00 0x00f9 0x0015 0x0000.000e3188 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326653343 0x08 9 0x00 0x00f9 0x000d 0x0000.000e315e 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326653343 0x09 9 0x00 0x00f9 0x002e 0x0000.000e3115 0x008002bd 0x0000.000.00000000 0x00000001 0x00000000 1326653343 0x0a 9 0x00 0x00f9 0x000e 0x0000.000e3173 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326653343 0x0b 9 0x00 0x00f9 0x0009 0x0000.000e3108 0x008002bd 0x0000.000.00000000 0x00000001 0x00000000 1326653343 0x0c 9 0x00 0x00f9 0x0028 0x0000.000e3134 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326653343 0x0d 9 0x00 0x00f9 0x000a 0x0000.000e3168 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326653343 0x0e 9 0x00 0x00f9 0x0007 0x0000.000e317e 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326653343 0x0f 9 0x00 0x00f9 0x0010 0x0000.000e3376 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326654543 0x10 9 0x00 0x00f9 0x0014 0x0000.000e3381 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326654543 0x11 9 0x00 0x00f9 0x000f 0x0000.000e3364 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326654543 0x12 9 0x00 0x00f9 0x001c 0x0000.000e37f2 0x008002cb 0x0000.000.00000000 0x00000001 0x00000000 1326657606 0x13 9 0x00 0x00f8 0x001a 0x0000.000ddd4a 0x008002bd 0x0000.000.00000000 0x00000001 0x00000000 1326492007 0x14 9 0x00 0x00f9 0x0016 0x0000.000e34ee 0x008002bf 0x0000.000.00000000 0x00000001 0x00000000 1326655603 0x15 9 0x00 0x00f9 0x0001 0x0000.000e3286 0x008002be 0x0000.000.00000000 0x00000001 0x00000000 1326654003 0x16 9 0x00 0x00f9 0x001b 0x0000.000e352d 0x008002bf 0x0000.000.00000000 0x00000001 0x00000000 1326655743 0x17 9 0x00 0x00f9 0x0018 0x0000.000e3568 0x008002cb 0x0000.000.00000000 0x00000001 0x00000000 1326655803 0x18 9 0x00 0x00f9 0x0012 0x0000.000e375b 0x008002cb 0x0000.000.00000000 0x00000001 0x00000000 1326657242 0x19 9 0x00 0x00f9 0x0026 0x0000.000e3554 0x008002c8 0x0000.000.00000000 0x00000003 0x00000000 1326655802 0x1a 9 0x00 0x00f8 0x001d 0x0000.000ddeb0 0x008002bd 0x0000.000.00000000 0x00000001 0x00000000 1326493035 0x1b 9 0x00 0x00f9 0x0019 0x0000.000e3553 0x008002c3 0x0000.000.00000000 0x00000003 0x00000000 1326655802 0x1c 9 0x00 0x00f9 0x002b 0x0000.000e874a 0x008002cb 0x0000.000.00000000 0x00000001 0x00000000 1326657871 0x1d 9 0x00 0x00f8 0x002a 0x0000.000e2e6d 0x008002bd 0x0000.000.00000000 0x00000001 0x00000000 1326652128 0x1e 9 0x00 0x00f8 0x0027 0x0000.000ddd32 0x008002bd 0x0000.000.00000000 0x00000003 0x00000000 1326492003 0x1f 9 0x00 0x00f8 0x0017 0x0000.000e3556 0x008002cc 0x0000.000.00000000 0x00000007 0x00000000 1326655802 0x20 9 0x00 0x00f8 0x001e 0x0000.000ddd31 0x008002ba 0x0000.000.00000000 0x00000003 0x00000000 1326492003 0x21 9 0x00 0x00f8 0x0020 0x0000.000ddd30 0x008002b8 0x0000.000.00000000 0x00000003 0x00000000 1326492003 0x22 9 0x00 0x00f8 0x0002 0x0000.000e2f0d 0x008002bd 0x0000.000.00000000 0x00000001 0x00000000 1326652202 |
0x23 10 0x80 0x00f9 0x0002 0x0000.000e8781 0x008002cb 0x0000.000.00000000 0x00000001 0x00000000 0然后dump 数据块看一下itl的情况
1 2 3 4 | Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x0008.029.0000012a 0x0080036a.00f3.05 C --- 0 scn 0x0000.000d6ead 0x02 0x000a.023.000000f9 0x008002cb.00f4.0c ---- 1 fsc 0x0000.00000000 0x03 0x0005.00f.00000148 0x0080004c.019f.16 C --- 0 scn 0x0000.000d6ea7 |
下面再dump undo 块的内容看一下:
1 2 3 4 5 6 7 8 | UNDO BLK: xid: 0x000a.023.000000f9 seq: 0xf4 cnt: 0xc irb: 0xc icl: 0x0 flg: 0x0000 Rec Offset Rec Offset Rec Offset Rec Offset Rec Offset --------------------------------------------------------------------------- 0x01 0x1f70 0x02 0x1f1c 0x03 0x1e74 0x04 0x1e08 0x05 0x1d84 0x06 0x1d24 0x07 0x1cc4 0x08 0x1bd0 0x09 0x1b4c 0x0a 0x1aec 0x0b 0x1a8c |
0x0c 0x19ec在itl中: xid中0x000a.023.000000f9, XID由三部分内容组成:XIDUSN(回滚段号),XIDSLOT(回滚段槽 号),XIDSQN(序列号) 0x000a代表undo segment id,即十进制为10。023代表undo segment header中的回滚槽,即transaction table中的一行。 000000f9代表序列号。XID对应一个UBA(undo block address),表示该事务回滚信息的开始位置, 这个通过v$transaction可以对应上:
1 2 3 4 5 6 7 8 | SYS/SYS@ORCL> select xidusn,xidslot,xidsqn,ubafil,ubablk,ubasqn,ubarec from 2 v$ transaction ; XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBASQN UBAREC ---------- ---------- ---------- ---------- ---------- ---------- ---------- 10 35 249 2 715 244 12 1 row selected. |
XIDUSN,XIDSLOT,XIDSQN共同组成了Xid。UBAFIL,UBABLK,UBASQN,UBAREC共同组成了undo segment header中transaction table中的UBA. 在每个data block的ITL中也有一个UBA,实际上这个UBA是指向了该block对应的undo信息的起始位置,这个UBA主要的作用是提供一致性读, 因为一 致性读需要通过undo信息来构造一个CR block,通过这个UBA就可以直接定位到block的回滚信息的起始位置,而不再需要通过undo segment header中的事务表。