search 2013 adfgs

简单来说Commit就是将Transaction中的所有处理存储(不能再Rollback)到Database,而Rollback则是将在Transaction中直至Rollback之前所做的操作全部取消。在Oracle中没有显式的“开始事务”的语句,Transaction隐式的开始于第一条修改数据的语句(即第一条得到TX锁能力的语句),当然这里的第一次是针对上一次Commit或者Rollback后的所有操作。

也许大家会有感觉,Commit操作好像根本没有花什么时间,而Rollback往往会需要一定的时间。Why?

其实在您执行对数据库的操作的后,你所做的操作后并在Commit[Or Rollback]之前,您所做的草实际上已经在数据库中实现了,即数据库中的“数据”在您操作后已经改变,redolog也已经记录下来您的操作,Rollback也已经做了“标记点”。然后当您执行Commit的时候所做的操作仅仅是删除掉Rollback的“标记点”,或者说重新开始一个新的Rollback“标记点”(可能说更改更来的准确些)。但是如果您不是执行Commit而是Rollback,那您所做的操作却有如下几项:1、向数据库提交回滚(Rollback)请求,数据库执行回滚,将数据库状态回复到您这一次Transaction最初的状态(即这一次Transaction所做的操作全部无效了);2、将回滚操作写入redolog;3、删除(更改)Rollback标记。不难看出当发出Commit命令后数据库的操作量比提交Rollback要少的很多,当然其执行时间就会少多了。

现在只有1个回复

  1. jametong Says @ 06-08-1 7:52 pm

    Rollback“标记点”
    这个概念怎么觉得有点别扭啊.. 那本书上的..

    commit的时候主要做一下几个事情..
    1. 清理仍然在sga中的dirty buffer的itl 中的transaction信息.
    2. 等待lgwr将log buffer中的log entry写入log file.
    3. 清理该transaction占有的tx锁资源..
    4. 记录一个commit marker到log file中去..

看完了要说点啥么?