commit提交,数据库做了什么-oracle
2014-06-03 15:32
197 查看
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做的并不多,它出发LGWR进程,将重做的记录写入联机日志,并且将修改的数据的数据库头部标记为已提交。提交后,undo快可以被其他 事务调用覆盖,只有到达一定条件后出发ckpt进程才会把SGA中的数据写入数据文件。其他的一些操作在commit之前已经操作完成,所以,即使很大的 数据量修改在commit的时候也不会消耗很多的时间。
在commit之前,加入执行一个update操作,首先会在share pool里解析生成执行计划,然后根据执行计划找到相关数据文件的数据块,调入buffcache,并在里面找到一个可以用的undo数据块,如果没有则从undo表空间里找并且调入buff cache。把修改之前的值放在undo数据块,修改后的值放在相关数据的数据块。在数据块发生过程中记录两次重做记录,并且记录重做记录号。在没有 commit或者rollback之前不会释放DML锁。
需要注意的是,由于在commit之前数据库做了很多操作,所以rollback会很消耗资源(对于相当大量的DML操作)
相关文章推荐
- oracle commit提交到底作了什么
- 在 .NET 中使用 oracle 数据库 事务提交,事务保存点
- Asp.net Oracle transaction事务出现奇怪的aotucommit自动提交现象及解决办法
- Oracle数据库应用,热数据的最佳定义是什么?
- ORACLE EXECUTE IMMEDIATE 'DML' 不能自动提交COMMIT 'DDL'触发COMMIT
- 什么是数据库之------oracle
- Oracle是什么类型的数据库
- 为什么session.commit引起事务的提交,session.insert和delete底层到底是什么
- oracle 的数据库、表空间、表是什么关系
- 【DB.Oracle】事务transaction的隐式提交commit
- MySQL set autocommit = 0或1分别什么啊,哪个是自动提交啊
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- oracle 10g数据库的异步提交
- oracle的commit过程中做了什么
- oracle停启数据库的步骤是什么啊?UNIX
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- setAutoCommit(false); 后没有手动commit. 对数据库有什么影响?
- 每天两道oracle笔试题+第四天:1、创建用户时,需要授予新用户什么权限方能使其连上数据库?2、备份如何分类?
- 4.事务提交过程,交易的基本概念,Oracle交易周期,保存点savepoint,数据库的隔离级别
- 数据库oracle--commit与不commit