码迷,mamicode.com
首页 > 数据库 > 详细

commit提交,数据库做了什么-oracle

时间:2014-06-04 12:57:03      阅读:509      评论:0      收藏:0      [点我收藏+]

标签:oracle   commit   update   数据库   

    commit是提交事务,那么commit到底做了什么?

     其实commit做的并不多,它出发LGWR进程,将重做的记录写入联机日志,并且将修改的数据的数据库头部标记为已提交。提交后,undo快可以被其他 事务调用覆盖,只有到达一定条件后出发ckpt进程才会把SGA中的数据写入数据文件。其他的一些操作在commit之前已经操作完成,所以,即使很大的 数据量修改在commit的时候也不会消耗很多的时间。

     在commit之前,加入执行一个update操作,首先会在share pool里解析生成执行计划,然后根据执行计划找到相关数据文件的数据块,调入buffcache,并在里面找到一个可以用的undo数据块,如果没有则从undo表空间里找并且调入buff cache。把修改之前的值放在undo数据块,修改后的值放在相关数据的数据块。在数据块发生过程中记录两次重做记录,并且记录重做记录号。在没有 commit或者rollback之前不会释放DML锁。

     需要注意的是,由于在commit之前数据库做了很多操作,所以rollback会很消耗资源(对于相当大量的DML操作)


commit提交,数据库做了什么-oracle,布布扣,bubuko.com

commit提交,数据库做了什么-oracle

标签:oracle   commit   update   数据库   

原文地址:http://5061184.blog.51cto.com/5051184/1421525

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!