时间:2021-04-16
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命令的处理过程的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java调用Oracle存储过程详解步骤:1、编写Oracle存储过程2、编写数据库获取连接工具类3、编写简单应用调用存储过程实现:1、Oracle存储过程:/
php访问oracle存储过程实例详解比如我的本地Oracle数据库有一个package,里面有一个存储过程:createorreplacepackagePKG
select属于数据操纵语言(DML),是操纵数据类的功能。数据操纵语言(DML)是用来操纵数据库中数据的命令。包括:select、insert、update、
MySQL数据库source命令详解及实例MySQL数据库source命令,该命令是数据库导入命令。source命令的用法非常简单,首先你需要进入MySQL数据
在JavaEE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个