Oracle数据库的DML命令的处理过程详解
上一篇 / 下一篇 2012-05-14 09:54:46 / 个人分类:数据库
DML语句与undo
X)a-i'\8n051Testing软件测试网9C/k]!OU5`4EWwAP+M当我们发出一条DML(比如update tab set col1='A' where col1='B')语句时,其执行过程可大致概括为以下几步。
/O4c'~Z5Kat051Testing软件测试网r$Vx'T8B?!H.`1、在shared pool里进行解析,从而生成执行计划。51Testing软件测试网%}v+V0|7se-K[m
&E*G4_)nH#m4z.P0 2、假设根据执行计划,得出col1='B'的记录存放在10号数据文件的54号数据块里。51Testing软件测试网He6ji/F6@ _+y4l
51Testing软件测试网vf8L6_A"uA3、服务器进程在buffer cache里找一个可用的undo数据块,如果没有发现,则到undo表空间里找一个可用的undo块,并调入buffer cache。假设获得的undo数据块号为24号,位于11号undo数据文件里。
Ut'o@'H051Testing软件测试网NO]4HjRm5d-I4、将改变前的值,也就是A放入11号undo数据块。
7d\h\]cl&Q0e0+ME}/Uk7n2g0 5、由于undo数据块发生了变化,于是产生重做记录,假设重做记录号为120。51Testing软件测试网6]R2h?,X@\)m4I&B/aa6Su
v"I Y)WwH!I7w0 行号 事务id file# block# row column value
7C%I!kC}"a5K0_.jg] W3^Q0 120 T1 24 11 10 col1 A51Testing软件测试网Od/Q,I||
b] j Lge-u+N!O0 6、在buffer cache里找到54号数据块。如果没有发现,则从10号数据文件里调入。
dOLnX0'Z }a"]])fH$]0 7、将改变后的值,也就是B放入54号数据块。
%fu(C O2Om1P0lw h K1w},G0 8、由于数据块发生了变化,于是产生重做记录,假设重做记录号为121。51Testing软件测试网r~hxY"^!V4\
51Testing软件测试网7nd O:v\ [4F,o'X"w行号 事务id file# block# row column value51Testing软件测试网7D)xCp?AF6C$g2o
51Testing软件测试网x'X0[c DB121 T1 10 54 10 col1 B
.F&mg4rp)nKF0w1s4t"O3kIKp0 9、控制权返回给用户,如果在SQL*Plus里执行DML,则表现为光标返回。
6wK(aM ?0D0@ a0:l&j