Oracle前镜像数据读
“Undo前镜像”是Oracle早期推出的特性之一,也是在诸多数据库产品中异军突起的致胜法宝。当我们在一个会话中启动事务,对数据进行增加、修改和删除操作的时候,只要没有提交事务,其他会话只能看到数据的旧版本,也就是事务会话修改之前的版本。所以,在Oracle中,select操作不会阻塞任何操作,也不会被任何操作所阻塞。
1、Undo与前镜像
这样的特性就是依赖Oracle推出的Undo前镜像机制。当我们开启事务,修改一个数据块的时候,Oracle首先会修改数据块块头的ITL(事务槽)信息,将当前事务信息(xid事务标识)写入到ITL中的一行。之后标记下这个事务对应的Undo空间地址。之后,才能进行数据块的修改。
在修改数据块的过程中,Oracle的Server Process会将数据块的原有内容(对Update和Delete操作而言),保存到Undo表空间上Undo段的位置上。
Undo段内容有很多的用途。当另外的会话需要访问数据块时,首先会去检查数据块的ITL事务槽信息,查看要访问的数据块是不是正在被修改。如果正在被修改,就根据ITL上面留下的事务槽信息访问Undo段。同时,如果只有一部分数据被修改,Oracle Server Process还要结合数据块中未被修改的内容进行结果集合拼装。
只有在事务正式完成,commit或者rollback之后,Undo段中的extent状态才不再是Active。非Active状态的Undo也有其价值,Oracle的“多版本一致读”、“Flashback”等特性,都是基于对非Active状态Undo的数据利用。
https://blog.csdn.net/haiross/article/details/10967951
评论
有用 2ghjhjhjh
评论
有用 0
墨值悬赏

