Oracle UNDO块
7)通过dba_extents视图查出一共有两个区,共16个块? [email?protected] prod>select extent_id,file_id,block_id,blocks,bytes from dba_extents where segment_name=‘_SYSSMU11_1796584641$‘; EXTENT_ID FILE_ID BLOCK_ID BLOCKS BYTES ---------- ---------- ---------- ---------- ---------- 0 6 8 8 65536 1 6 16 8 65536 8)通过dba_segments视图查出UNDO段头块,即6号文件的8号块是UNDO段头块(所以#blocks:15) [email?protected] prod>select header_file,header_block from dba_segments where segment_name=‘_SYSSMU11_1796584641$‘; HEADER_FILE HEADER_BLOCK ----------- ------------ 6 8 ?9)继续向下 Extent Map ----------------------------------------------------------------- 0x01800009 length: 7 0x01800010 length: 8 ?区位图:第一个区是undo块的地址为0x0180009开始的前7个块+头块;第二个区是0x0180010开始的8-16块。 10)继续向下 Retention Table ----------------------------------------------------------- Extent Number:0 Commit Time: 1552092157 Extent Number:1 Commit Time: 1552092157? 区的提交时间戳,是从1970年1月1号零时开始计数(以秒为单位记录) 11)继续向下 TRN CTL:: seq: 0x0003 chd: 0x0020 ctl: 0x0000 inc: 0x00000000 nfb: 0x0001 mgc: 0xb000 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe) uba: 0x0180000e.0003.0c scn: 0x0000.00104372? 事务控制: ?seq: 0x0003? 表示此事务修改前的值所在的UNDOBLOCK块被覆盖了3次,与第三行的uba:0x0180000f.0003.08中的0003对应。 ?chd:0x0020? 表示发生一个新的事务,此时会在下面的TRNTBL::(事务表)的index=0x00020槽中放入新事务信息,即事务表的链头或叫入口。 ?ctl: 0x0000? 表示事务表的链尾(实际上大家可以去TRN TBL::看index=0x0000,它对应的SCN=0x0000.00104485是本事务表中最大的SCN,即此事务槽最后才会被覆盖) ?nfb: 0x0001??表示UNDO块在空闲池的空闲块数,0x0000表示池中没有空闲UNDO块了,即FREE BLOCKPOOL::没空闲的块了。 ?flg: 0x0001??表示该块的用途,1=KTUUNDO HEADER(2=KTU UNDO BLOCK等等) ?uba:?0x0180000e.0003.0c 表示新事务的第一条UNDO记录(由三部分组成undo块的地址、UNDO块被重用的次数、在UNDO块的第几条记录)。
12)继续向下 FREE BLOCK POOL:: uba: 0x0180000e.0003.0e ext: 0x0 spc: 0x183a uba: 0x00000000.0003.19 ext: 0x0 spc: 0x10c0 uba: 0x00000000.0001.0e ext: 0x0 spc: 0x18a2 uba: 0x00000000.0000.00 ext: 0x0 spc: 0x0 uba: 0x00000000.0000.00 ext: 0x0 spc: 0x0? UNDO块的空闲池,当事务做了提交会把此事务所在的UNDO块加入空闲池中。 (编辑:PHP编程网 - 湛江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |