当前位置 > 主页 > 万和大讲堂 >


Oracle数据库的DML命令的处理过程详解 南京OCP培训

2015-12-15 10:42

  Oracle数据库的DML命令的处理过程是本文cuug老师主要要介绍的内容,从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了。

 

  DML语句与undo

 

  当我们发出一条DML(比如update tab set col1='A' where col1='B')语句时,其执行过程可大致概括为以下几步。南京Oracle认证培训

 

  1、在shared pool里进行解析,从而生成执行计划。

 

  2、假设根据执行计划,得出col1='B'的记录存放在10号数据文件的54号数据块里。

 

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

 

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

 

  5、由于undo数据块发生了变化,于是产生重做记录,假设重做记录号为120.

 

  行号 事务id file# block# row column value

 

  120 T1 24 11 10 col1 A

 

  6、在buffer cache里找到54号数据块。如果没有发现,则从10号数据文件里调入。

 

  7、将改变后的值,也就是B放入54号数据块。南京Oracle认证培训

 

  8、由于数据块发生了变化,于是产生重做记录,假设重做记录号为121.

 

  行号 事务id file# block# row column value

 

  121 T1 10 54 10 col1 B

 

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

 

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

 

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

 

  事务只要被提交或回滚,那么该事务所使用的undo块就可以被覆盖。对于上面的例子来说,当第10步,用户发出commit命令以后,11号undo块里的数据就可以被其他事务所覆盖。南京OCP培训

 

  关于Oracle数据库的DML命令的处理过程的相关知识就介绍到这里了,希望江苏万和小编的本次的介绍能够对您有所收获!


最近开班 more>
  • Web前端开发
  • 软件测试
  • 软件测试预科班
  • AI大模型+全栈开发开班
  • 云原生精英班
  • 云网预科班
  • 开发课程基础班第三期
  • 开发课程基础班第二期
  • 开发课程基础班第五期
  • Java全栈
  • CISP
  • HCIP-cloud
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • OCP 19C
  • RHCA
  • 6月9日
  • 5月21日
  • 5月14日
  • 6月9日
  • 5月7日
  • 5月26日
  • 5月19日
  • 5月12日
  • 6月3日
  • 6月9日
  • 随时开课
  • 7月12日
  • 5月19日
  • 5月19日
  • 5月7日
  • 5月10日
  • 5月24日
  • 5月24日
  • 随时开课
  • 随时开课
    • 姓 名 :
    • 电 话 :
    • 课 程 :

技术交流群

  • Java大数据交流群560819979加入
  • Python技术交流群595083299加入
  • Oracle技术交流群595119011加入
  • Web前端技术交流群604697610加入
  • Huawei技术交流群482919361加入
  • Redhat技术交流群587875348加入
  • UI设计技术交流群511649801加入
  • Cisco技术交流群596886705加入
  • IT运维技术交流群605888381加入