首页 > 代码库 > commit提交,数据库做了什么-oracle
commit提交,数据库做了什么-oracle
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操作)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。