一致性读。
同时也衍生出了一些新的
功能,
比如
Flashback query
。
传统的
undo
是通过
undo segment
来管理的,
我们看下面的示例:
事务开始,必须首先在
data block
中分配
ITL
,
ITL
中记录了事务
ID(XID)
,
XID
由三部分内容组成:
XIDUSN(
回滚段号
)
,
XIDSLOT(
回滚段槽号
)
,
XIDSQN(
序列号
)
,在
Undo segment
header
中有一个事务表,记录该回滚段上的事务信息,每个事务都
会占据了一个回滚槽,
XID
对应一个
UBA(undo block address)
,
表示该事务回滚信息的开始位置。
在上面的例子中,事务分别在
T1,T2,T3
时间执行了三个操作,更新了三个
block
中的数据,在每
个
data block
中都存在一个
ITL
,指向
undo segment header
中的事务表。
undo
信息分别存放在三个
undo block
中,
undo
信
息是一个链表结构,而
undo segment header
中的
uba
则指向了
最后一个
undo block
,
这也是回滚的起始位置。
如果事务需要回滚,
只需要在
undo segment header
中的事务表中找到事务回滚的起
始位置,然后通过
undo
链表,就可以依次回滚整个事务。