zoukankan      html  css  js  c++  java
  • Oracle数据库的DML命令的处理过程详解

    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了。

    DML语句与undo

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

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

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

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

    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号数据块。

    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操作,则表现为光标返回。

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

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

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

  • 相关阅读:
    JavaScript中的闭包
    SQL 备忘
    SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
    unable to start debugging on the web server iis does not list an application that matches the launched url
    Freebsd 编译内核
    Freebsd 6.2中关于无线网络的设定
    【Oracle】ORA01219
    【Linux】Windows到Linux的文件复制
    【Web】jar命令行生成jar包
    【Linux】CIFS挂载Windows共享
  • 原文地址:https://www.cnblogs.com/shihao/p/2200382.html
Copyright © 2011-2022 走看看