首页 > 代码库 > oracle事物
oracle事物
undo段的组成:段头、回滚块
事物ID:每一个事物都有一个自己的事物ID,就像身份证号一样。
在v$transaction数据字典中xid就是事物ID,xid既是一个编号,也是一个地址,xid中写的有1、使用哪个回滚段的段头块;2、事物表中有47行,使用的是哪一行;3、该行被覆盖的次数。这样就组成了唯一的事物ID。
事物表:undo表空间的undo段的第一个数据块(即undo段的段头块)里放事物表,共有47行。事物开始第一件事就是在事物表中找到一个空行,写上事物信息。也就是说undo段最多47个活动事物,但是oracle会尽量将一个事物放到一个段上,为了均匀分配(undo段的段头块的位置在dba_segments表空间可以查得)。
oracle中有哪些undo段:
事物槽:在每个数据块的块头部分有事物槽,事物槽包括xid、uba(undo block address)等等。
当事物发生的时候,第一件事会在undo表空间的相对空闲的undo段的段头块的事物表中找到一个槽位,写上事物信息(xid),给这个事物分配一个undo块(undo块里写的就是修改之前的数据),然后将undo块的地址(即uba写到事物表中),所以现在事物表中有xid和uba;第二件事在要修改的数据块的块头的事物槽中找到槽位,写上事物信息(xid),(目的是通过数据块上的xid可以找到事物表),然后在将要修改的数据块上修改数据,修改之前的信息写到undo块里。同时,在事物槽中也写上uba地址,指向回滚块。为什么要在两个地方写事物信息呢?下面有解释。
比如该事物修改了较多的数据,产生3个undo块,3个undo块有先后关系,它们会链起来,但是这是事物表中的uba就只是指向最新的undo块,这是便于回滚。
数据块的事物槽中的uba指向回滚数据,这便于构造CR块。
oracle事物