Oracle数据库的DML命令的处理过程详解

上一篇 / 下一篇  2012-05-14 09:54:46 / 个人分类:数据库

Oracle数据库的 DML命令的处理过程是本文我们主要要介绍的内容,从Oracle 9i起,有两种undo的管理方式:自动Undo管理(Automatic Undo Management,简称AUM)和手工Undo管理(Manual Undo Management,简称MUM)。Oracle 9i之前只能使用MUM,而且在MUM中,undo segment又叫做rollback segment。从Oracle 9i起,Oracle就建议使用AUM,而不应再使用MUM了。51Testing软件测试网%xEK#y W.q*}

  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软件测试网H e6ji/F6@ _+y4l

51Testing软件测试网vf8L6_A"uA

  3、服务器进程在buffer cache里找一个可用的undo数据块,如果没有发现,则到undo表空间里找一个可用的undo块,并调入buffer cache。假设获得的undo数据块号为24号,位于11号undo数据文件里。

Ut'o@'H051Testing软件测试网NO]4H jRm5d-I

  4、将改变前的值,也就是A放入11号undo数据块。

7d\h\]c l&Q0e0

+ME}/Uk7n2g0  5、由于undo数据块发生了变化,于是产生重做记录,假设重做记录号为120。51Testing软件测试网6]R2h?,X@\)m4I&B/aa6Su

v"IY)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(CO2Om1P0

lw hK1w},G0  8、由于数据块发生了变化,于是产生重做记录,假设重做记录号为121。51Testing软件测试网r~hxY"^!V4\

51Testing软件测试网7n d O:v\ [4F,o'X"w

  行号 事务id file# block# row column value51Testing软件测试网7D)xCp?AF6C$g2o

51Testing软件测试网x'X0[c DB

  121 T1 10 54 10 col1 B

.F&mg4rp)nKF0

w1s4t"O3kIKp0  9、控制权返回给用户,如果在SQL*Plus里执行DML,则表现为光标返回。

6wK(aM ?0D0@ a0

:l&ja ^u;o P h2~0  10、当用户发出commit命令时,触发LGWR进程,将120与121这两个重做记录写入联机日志文件,并将54号数据块和11号undo数据块头部所记录的事务状态标记设置为已提交。然后控制权返回给用户,如果在SQL*Plus里执行DML操作,则表现为光标返回。

1Mqm7W.R/Pj051Testing软件测试网qsoC:z

  11、这个时候,54号数据块以及11号undo块并不一定被DBWn写入数据文件。只有在脏数据块的数量达到一定程度才会被写入。

.}l.];M&t'SvYmS0

1Q}T{}0  事务只要被提交或回滚,那么该事务所使用的undo块就可以被覆盖。对于上面的例子来说,当第10步,用户发出commit命令以后,11号undo块里的数据就可以被其他事务所覆盖。51Testing软件测试网!Hb v9X\;l/a}&R

'hr$Fw+Wo*Qc8i5JU7Cl0  关于Oracle数据库的DML命令的处理过程的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!51Testing软件测试网2IA4_D`


TAG:

 

评分:0

我来说两句

Open Toolbar