|||
ITL:事务槽。每个数据/索引块都有一个事务槽。ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,位于数据块头(block header),itl由xid,uba,flag,lck和scn/fsc组成,用来记录该块所有发生的事务,一个itl可以看作是一条事务记录。当然,如果这个事务已经提交,那么这个itl的位置就可以被反复使用了,因为itl类似记录,所以,有的时候也叫itl槽位。如果一个事务一直没有提交,那么,这个事务将一直占用一个itl槽位,itl里面记录了事务信息,回滚段的入口,事务类型等等。如果这个事务已经提交,那么,itl槽位中还保存的有这个事务提交时候的SCN号。
每个数据/索引行头包含lock type,它记录着行在ITL中的slot。
每一个行只能与一个事务相关联
初始状态在块头分配两个ITL
ITL包括:TRANSACTION ID (XID)
Undo byte address (UBA)
System Change Number (SCN)
ITL单元会被每个修改块的当前事务覆写。
上一次的修改已被记录在undo块中。
dump一个块可以看到ITL信息类似如下:
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0006.002.0000158e 0x0080104d.00a1.6e --U- 734 fsc 0x0000.6c9deff0
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
Xid:事务id,在回滚段事务表中有一条记录和这个事务对应
Uba:回滚段地址,该事务对应的回滚段地址
第一段地址:回滚数据块的地址,包括回滚段文件号和数据块号
第二段地址:回滚序列号
第三段地址:回滚记录号
读一致性
oracle只会读提交之后的数据。避免脏读。
oracle读数据,读的是一个时间节点的。
CR块:
Cr块consistent read块也就是用来维护oracle的读一致性的数据块。当查询某些数据的时候,发现数据块的版本比我们要查询的新,例如session1执行了dml操作并没有提交,session2此时查找跟session1相关的dml操作的数据信息,此时查询的数据却是原来的数据信息。
查询的过程会在undo段中查找该数据块的前映像后,然后把前映像和current块合并形成了一个CR block,通过查询cr block就可以满足数据的一致性了。
SCN(system change number)
经典错误:snapslot too old ORA01555错误
原因:(1)select执行时间太长,(2)undo表空间压力太大,导致undo数据被覆盖(解决:增加undo表空间)
通过EM(企业管理器)可以修改undo表空间大小。主目录下方有个指导中心——还原管理——还原指导——出现一个图,横坐标:undo保留时间,对应纵坐标:undo表空间大小。
总之,根据保留时间寻找表空间大小
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-7-18 08:23
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社