
一条 DML 语句的执行流程 update t set coll=‘A’ where coll=‘B’
1 、在 shared pool 里面进行解析,从而生成执行计划
2 、根据执行计划,得出 coll=‘B’ 的记录存放在 10 号数据文件的 54 号数据块
里面
3 、服务器进程首先在 buffer cache 寻找一个可用的 undo 数据块(如果一个
事物已经提交,那么这个事务曾经使用过的 undo 数据块就可以被使用),如
果没有发现,则到 undo 表空间里找到一个可用的 undo 数据块,并调入到
buffer cache 。假设获得的 undo 数据块号为 24 号,位于 11 号 undo 数据文
件里
4 、将改变前的值,也就是 B 放入 24 号 undo 数据块( buffer cache 中)
5 、由于 undo 数据块发生了变化(只要是数据块发生变化,那么就产生重做
记录),于是产生重做记录,假设重做记录号是 120
6 、在 buffer cache 里面找到 54 号数据块,如果没有,则从 10 号数据文件
调入
7 、将改变后的值,也就是 A 放入 54 号数据块
8 、由于数据块发生了变化,于是产生重做记录,假设重做记录号是 121
评论